我有一个MVC形式(从模型所做的),它提交的时候,我希望得到一个参数,我的代码来设置表单并获取参数
using (@Html.BeginForm("myMethod", "Home", FormMethod.Get, new { id = @item.JobId })){
}
和我的家庭控制器中我有
[HttpPost]
public FileStreamResult myMethod(string id)
{
sting str = id;
}
不过,我总是得到错误
您正在寻找(或它的一个依赖)可能已被删除的资源,有其名称更改,或者暂时不可用。 请检查以下URL并确保其拼写正确。
当我省略了[HttpPost]
代码执行文件,但变量str
和id
为空。 我怎样才能解决这个问题吗?
编辑
这能造成的,因为myMethod的控制器是不是一个ActionResult? 我意识到,当我有这种方法被绑定到视图类型的ActionResult的方法,一切正常。 但类型FileStreamresult不能绑定到一个视图。 我怎样才能将数据传递给这样的方法?
如有疑问,请按照MVC约定。
创建一个视图模型,如果你还没有一个包含作业ID属性
public class Model
{
public string JobId {get; set;}
public IEnumerable<MyCurrentModel> myCurrentModel { get; set; }
//...any other properties you may need
}
强烈键入您的看法
@model Fully.Qualified.Path.To.Model
与作业ID添加一个隐藏字段的形式
using (@Html.BeginForm("myMethod", "Home", FormMethod.Post))
{
//...
@Html.HiddenFor(m => m.JobId)
}
并接受模型作为你的控制器动作参数:
[HttpPost]
public FileStreamResult myMethod(Model model)
{
sting str = model.JobId;
}
这是因为您所指定的形式方法GET
在视图中这种变化的代码:
using (@Html.BeginForm("myMethod", "Home", FormMethod.Post, new { id = @item.JobId })){
}
你似乎在指定的形式使用使用HTTP“GET”请求FormMethod.Get
。 除非你告诉它做一个职位,因为这是你似乎什么希望的ActionResult要做到这一点是行不通的。 这可能会改变工作FormMethod.Get
到FormMethod.Post
。
除了这一点,你可能还需要考虑如何GET和POST请求的工作,如何将这些与模型进行交互。
在这里,如果你指定一个类,则该模型结合可在POST过程中理解它,如果它的整数或字符串,那么你必须指定[FromBody]正确绑定它的问题是模型的结合。
使FormMethod以下更改
using (@Html.BeginForm("myMethod", "Home", FormMethod.Post, new { id = @item.JobId })){
}
和您的家庭控制器结合里面的字符串应指定[FromBody]
using System.Web.Http;
[HttpPost]
public FileStreamResult myMethod([FromBody]string id)
{
// Set a local variable with the incoming data
string str = id;
}
FromBody可在System.Web.Http。 请确保您有引用到类,并在CS文件中添加它。
文章来源: Submitting form and pass data to controller method of type FileStreamResult