ActionMethod param每次都为0

时间:2012-02-17 19:29:25

标签: asp.net-mvc-3

我有一个表单(这里是它的一些代码):

@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和类的集合时,你可以看到。

1 个答案:

答案 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>