提交表单并将数据传递给FileStreamResult类型的控制器方法

jpo*_*jpo 33 forms asp.net-mvc controller

我有一个mvc表单(由模型制作),当提交时,我想得到一个参数我有代码来设置表单并获取参数

using (@Html.BeginForm("myMethod", "Home", FormMethod.Get, new { id = @item.JobId })){
}
Run Code Online (Sandbox Code Playgroud)

在我家里的控制器里面

    [HttpPost]
    public FileStreamResult myMethod(string id)
    {
         sting str = id;

    }
Run Code Online (Sandbox Code Playgroud)

但是,我总是得到错误

您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用.请查看以下网址,确保拼写正确.

当我省略了[HttpPost],代码执行文件,但变量strid为空.我该如何解决这个问题?

编辑

这可能是因为控制器中的myMethod不是ActionResult吗?我意识到当我有一个类型为Actionresult的方法时,该方法绑定到一个视图,一切都运行良好.但FileStreamresult类型无法绑定到View.如何将数据传递给此类方法?

For*_*Two 50

如有疑问,请遵循MVC惯例.

如果尚未包含JobID属性,请创建viewModel

public class Model
{
     public string JobId {get; set;}
     public IEnumerable<MyCurrentModel> myCurrentModel { get; set; }
     //...any other properties you may need
}
Run Code Online (Sandbox Code Playgroud)

强烈输入你的观点

@model Fully.Qualified.Path.To.Model
Run Code Online (Sandbox Code Playgroud)

为表单添加JobId的隐藏字段

using (@Html.BeginForm("myMethod", "Home", FormMethod.Post))
{   
    //...    
    @Html.HiddenFor(m => m.JobId)
}
Run Code Online (Sandbox Code Playgroud)

并接受模型作为控制器操作中的参数:

[HttpPost]
public FileStreamResult myMethod(Model model)
{
    sting str = model.JobId;
}
Run Code Online (Sandbox Code Playgroud)


Cof*_*ode 14

这是因为您已将表单方法指定为GET

将视图中的代码更改为:

using (@Html.BeginForm("myMethod", "Home", FormMethod.Post, new { id = @item.JobId })){
}
Run Code Online (Sandbox Code Playgroud)