【发布时间】:2014-05-20 09:21:56
【问题描述】:
我正在开发一个 MVC 5 Web 应用程序。其中一个视图引用了部分视图,如下所示
<div class="row">
<div class="panel-body" id="TimeEntryPartial">
@Html.Partial("_TimeEntryPartial", Model.TimeEntry)
</div>
</div>
Partial View 然后显示一个包含多个字段的表单,其中一个是隐藏字段,就像这样
@using (Html.BeginForm("AddTimeEntry", "TimeEntry", FormMethod.Post, new { name = "frm", id = "frm" }))
{
@Html.HiddenFor(m => m.SelectedUserID)
<div id="AddButtons">
<div class="col-sm-12">
<input type="submit" id="btnAdd" name="btnAdd" class="btn btn-warning btn-block" value="Add Entry">
</div>
</div>
}
当用户提交表单时,会在 Controller 中调用 HttpPost Action,就像这样
[HttpPost]
public ActionResult AddTimeEntry(TimeEntryViewModel model)
{
if(ModelState.IsValid)
{
//code here
int userID = model.SelectedUserID;
}
}
除了 SelectedUserID 之外,表单中的所有值都在 ViewModel 中成功传递。这始终是 0。
我认为这可能与隐藏字段有关,因此我将其更改为文本框,我可以看到其中的值。但是,再次调用 HttpPost 操作时,属性 SelectedUserID 的值不包含在 ViewModel 中。
有人对如何解决这个问题有任何建议吗?
感谢您的帮助。
【问题讨论】:
-
如果你得到一个 0,那是因为这是隐藏的值,否则如果模型绑定器中的字段识别有任何问题,你应该收到 null。
-
@Bardo 对不起,你错了。正如我的问题中所述,我还用文本框替换了隐藏字段,并且在用户提交表单之前我可以看到其中包含的正确值。但在 Http Post Action 中检索时值仍然为 0。
-
代码对我来说看起来不错,我想我们可能需要看一些额外的脚手架。主视图中还存在什么?浏览器看到了什么?发给服务器的帖子是否包含正确的详细信息(请咨询 Fiddler)?
-
您能展示一下
TimeEntry和TimeEntryViewModel的型号吗?您的 partialView 使用的是哪个模型? -
能否对这个问题投反对票,请解释原因?对结构如此完善的问题投反对票似乎很荒谬。
标签: asp.net-mvc asp.net-mvc-5 hidden-field asp.net-mvc-partialview