我一直在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 }))
但它没有任何区别。我做错了什么?
答案 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))