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

Asp.net mvc 提交表单并将数据传递给FileStreamResult类型的控制器方法,asp.net-mvc,forms,controller,Asp.net Mvc,Forms,Controller,我有一个mvc表单(由模型制作),提交时,我想获取一个参数 我有设置表单和获取参数的代码 using (@Html.BeginForm("myMethod", "Home", FormMethod.Get, new { id = @item.JobId })){ } 在我的家庭控制器里我有 [HttpPost] public FileStreamResult myMethod(string id) { sting str = id; } 然

我有一个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不能绑定到视图。如何将数据传递给这些方法?

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

将视图中的代码更改为:

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

您似乎正在使用
FormMethod.GET
指定要使用HTTP“GET”请求的表单。除非你让它写一篇文章,否则这是行不通的,因为这似乎是你想要ActionResult做的。这可能通过将
FormMethod.Get
更改为
FormMethod.Post
来实现


除此之外,您可能还需要考虑Get和Post请求如何工作,以及它们如何与模型交互。

如果有疑问,请遵循MVC约定

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

public class Model
{
     public string JobId {get; set;}
     public IEnumerable<MyCurrentModel> myCurrentModel { get; set; }
     //...any other properties you may need
}
将JobId的隐藏字段添加到表单中

using (@Html.BeginForm("myMethod", "Home", FormMethod.Post))
{   
    //...    
    @Html.HiddenFor(m => m.JobId)
}
并接受模型作为控制器操作中的参数:

[HttpPost]
public FileStreamResult myMethod(Model model)
{
    sting str = model.JobId;
}

这里的问题是模型绑定如果您指定了一个类,那么模型绑定可以在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文件中。

您正在表单声明中指定GET,但希望它调用您的POST方法?我也尝试省略HttpPost,但我的变量str和id始终为null。我尝试将formmethod更改为post,但没有区别。您的视图是强类型的吗?我返回的不是视图,而是FileStreamResult。因此,我没有在controllerBut中向myMethod添加视图的选项,但是您仍然可以使用mvc的内置约定和模型绑定强式键入包含表单的视图并传递数据。这不会影响您返回fileStreamResult@jpo作为对编辑的回应:您从POST方法返回的内容对模型绑定绝对没有影响。如果您的模型是IEnumerable,只需将其添加到视图模型(请参见编辑)。如果你遵循我在这里概述的模式,你应该不会有任何问题。我会试试的。假设JobId是myCurrentModel的一个元素,如何初始化字符串str?我尝试了sting str=model.single().JobId,但出现错误“序列包含多个元素”,请使用
First()
FirstOrDefault()
或指定
single()
的条件,确保您有对System.Web.Http的引用;
using System.Web.Http;
[HttpPost]
public FileStreamResult myMethod([FromBody]string id)
{
     // Set a local variable with the incoming data
     string str = id;

}