我有一个表单(这里是它的一些代码):
@model Discussion
@{
ViewBag.Title = "Edit Discussion";
Layout = "~/Views/Shared/_App.cshtml";
}
@using (Html.BeginForm("Update", "Discussion", FormMethod.Post, new { id = Model.discussionId, @class = "update" }))
{
... rest of the view code
}
我的相关控制器的更新方法有:
[HttpPost]
[ValidateInput(false)]
public ActionResult Update(FormCollection col, int id = 0)
{
... rest of code
}
当提交表单时,我一直得到一个id为0而不是我从模型中看到的ID,当我调试时,显然在表单渲染过程中使用了内部。就在我提交时,它没有正确传递id。
我在语法方面做错了吗? Html.BeginForm中的新{}我想我不明白当提交表单时,新的匿名类型是如何匹配此id的,当它是id和类的集合时,你可以看到。
答案 0 :(得分:2)
执行new {id = Model.discussionId ...}
时,您要设置表单元素的id属性。要正确地获取ID,您必须将其作为表单的输入。因此,在表单中,您将使用以下内容放置隐藏的输入元素:@Html.Hidden("id", Model.discussionId)
所以你当前的表格是这样的:
<form id="theDiscussionId" class="update" action="/Discussion/Update">
... rest of the view code
</form>
你需要它像这样:
<form class="update" action="/Discussion/Update">
<input type="hidden" name="id" value="theDiscussionId" />
... rest of the view code
</form>