35

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

4

4 回答 4

53

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

如果您还没有包含 JobID 的属性,请创建一个 viewModel

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

将 JobId 的隐藏字段添加到表单

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

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

[HttpPost]
public FileStreamResult myMethod(Model model)
{
    sting str = model.JobId;
}
于 2013-01-02T15:38:50.197 回答
14

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

将视图中的代码更改为:

using (@Html.BeginForm("myMethod", "Home", FormMethod.Post, new { id = @item.JobId })){
}
于 2013-01-02T15:26:57.843 回答
3

您似乎正在指定使用 HTTP 'GET' 请求的表单FormMethod.Get。除非您告诉它发布帖子,否则这将不起作用,因为这似乎是您希望 ActionResult 执行的操作。这可能会通过更改FormMethod.GetFormMethod.Post.

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

于 2013-01-02T15:29:24.563 回答
3

这里的问题是模型绑定,如果您指定一个类,那么模型绑定可以在发布期间理解它,如果它是整数或字符串,那么您必须指定 [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 文件中。

于 2013-01-02T16:01:45.023 回答