改变Html.beginform()后MVC 4页面无法正常工作

时间:2014-08-07 17:16:22

标签: c# asp.net-mvc asp.net-mvc-4 razor

我一直在edit.cshtml页面的顶部使用这一行:

@using (Html.BeginForm())

然后我把它改为:

@using (Html.BeginForm("Edit", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))

现在当我点击该页面上的提交时,我尝试运行此方法:

public ActionResult Edit([Bind(Include = "description,tags,files,fileString")] Task task, int keyId, string editFiles)

我收到此错误:

  

参数字典包含参数' keyId'的空条目。   非可空类型的System.Int32'方法   ' System.Web.Mvc.ActionResult编辑(Combined.Models.Task,Int32,   System.String)' in' Combined.Controllers.HomeController'。可选的   参数必须是引用类型,可空类型或声明为   一个可选参数。参数名称:参数说明:An   在执行当前Web期间发生了未处理的异常   请求。请查看堆栈跟踪以获取有关的更多信息   错误以及它在代码中的起源。

     

异常详细信息:System.ArgumentException:参数   字典包含参数' keyId'的空条目。不可空的   输入' System.Int32'方法' System.Web.Mvc.ActionResult   编辑(Combined.Models.Task,Int32,System.String)'在   ' Combined.Controllers.HomeController&#39 ;.可选参数必须是a   引用类型,可空类型,或声明为可选   参数。参数名称:参数

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

我尝试将该行更改为:

@using (Html.BeginForm("Edit", "Home", FormMethod.Post, new { enctype = "multipart/form-data", keyId = Model.keyId }))

但它没有任何区别。我做错了什么?

2 个答案:

答案 0 :(得分:2)

将KeyId作为隐藏输入而不是路由参数添加到表单中,因为您要发布。

@Html.HiddenFor(model => model.keyId)

(实际上,您将其添加为Html属性。在页面上查看源代码并查看其呈现位置。)

答案 1 :(得分:0)

谢谢@ ehsan-sajjad,在我的情况下,我使用了错误的重载,你的评论帮助了我。

这是有用的,将id放在控制器之后和表单方法之前:

@using (Html.BeginForm("Edit", "Home", new { keyId = Model.keyId }, FormMethod.Post))