提交表格和数据传递到控制器类型FileStreamResult的方法(Submitting form

2019-07-17 18:54发布

我有一个MVC形式(从模型所做的),它提交的时候,我希望得到一个参数,我的代码来设置表单并获取参数

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

和我的家庭控制器中我有

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

    }

不过,我总是得到错误

您正在寻找(或它的一个依赖)可能已被删除的资源,有其名称更改,或者暂时不可用。 请检查以下URL并确保其拼写正确。

当我省略了[HttpPost]代码执行文件,但变量strid为空。 我怎样才能解决这个问题吗?

编辑

这能造成的,因为myMethod的控制器是不是一个ActionResult? 我意识到,当我有这种方法被绑定到视图类型的ActionResult的方法,一切正常。 但类型FileStreamresult不能绑定到一个视图。 我怎样才能将数据传递给这样的方法?

Answer 1:

如有疑问,请按照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;
}


Answer 2:

这是因为您所指定的形式方法GET

在视图中这种变化的代码:

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


Answer 3:

你似乎在指定的形式使用使用HTTP“GET”请求FormMethod.Get 。 除非你告诉它做一个职位,因为这是你似乎什么希望的ActionResult要做到这一点是行不通的。 这可能会改变工作FormMethod.GetFormMethod.Post

除了这一点,你可能还需要考虑如何GET和POST请求的工作,如何将这些与模型进行交互。



Answer 4:

在这里,如果你指定一个类,则该模型结合可在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