【问题标题】:MVC 4 Page not working after altering Html.beginform()更改 Html.beginform() 后 MVC 4 页面无法正常工作
【发布时间】:2014-08-07 17:16:21
【问题描述】:

我一直在我的 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 Edit(Combined.Models.Task, Int32, System.String)”在“Combined.Controllers.HomeController”中。一个可选的 参数必须是引用类型、可为空的类型或声明为 一个可选参数。参数名称:参数说明:一个 当前 web 执行过程中发生未处理的异常 要求。请查看堆栈跟踪以获取有关 错误以及它起源于代码的位置。

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

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

我尝试将行更改为:

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

但这并没有什么不同。我做错了什么?

【问题讨论】:

  • 你实际上使用了错误的重载

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


【解决方案1】:

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

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

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

【讨论】:

  • 我试过 @Html.HiddenForm(model => model.keyId) (这是我在另一篇 SO 帖子中看到的)但 VS 似乎找不到方法。这不是正确的做法吗?
  • 不确定是否是您评论中的拼写错误,但应该是 HiddenFor。 (不是 HiddenForm)
  • 不,不是错字,也许是另一篇文章中的错字。我是如此接近!谢谢!
【解决方案2】:

感谢@ehsan-sajjad,就我而言,我使用了错误的重载,您的评论帮助了我。

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

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

【讨论】:

  • 这应该在 cmets 中而不是作为另一个答案添加,请考虑移动它,因为它可能对某些人有帮助,但这不是一个答案。
猜你喜欢
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多