隐藏在视图模型中没有得到正确的值
我有一个多步骤的文件导入过程。 我有一个隐藏的窗体input在我看来,我正在试图从视图模型中填充“CurrentStep”。
<% = Html.HiddenFor(model => model.CurrentStep) %>
CurrentStep是一个枚举,我总是得到默认值,而不是我提供给视图模型的。 另一方面,这给我正确的价值:
<p><% = Model.CurrentStep %></p>
我意识到我可以手动编码隐藏的input,但我想知道:我做错了什么? 有没有更好的方式来跟踪邮政之间的当前步骤?
提前致谢。
你做错了什么是你试图修改控制器操作中的POSTvariables的值。 所以我想你正在试图做到这一点:
[HttpPost] public ActionResult Foo(SomeModel model) { model.CurrentStep = Steps.SomeNewValue; return View(model); }
而像HiddenFor这样的html助手将总是首先使用POSTed值,然后是模型中的值。
所以你有几个可能性:
-
从模型状态中删除值:
[HttpPost] public ActionResult Foo(SomeModel model) { ModelState.Remove("CurrentStep"); model.CurrentStep = Steps.SomeNewValue; return View(model); }
-
手动生成隐藏的字段
<input type="hidden" name="NextStep" value="<%= Model.CurrentStep %>" />
-
写一个自定义的助手,将使用您的模型的价值,而不是被张贴的
我的解决scheme是使用Darin的第二个选项,因为选项1(从模型状态清除)意味着硬编码一个string(并且命名约定对于复杂的模型可能会非常棘手),并且想要避免选项3,因为我已经有了这么多的自定义助手。
<input type="hidden" name="@Html.NameFor(x => Model.SomeId)" value="@Model.SomeId" />
只是提醒您可以使用Html.NameFor
保持干净。
- unit testingASP.NET DataAnnotationsvalidation
- ASP.NET 5 MVC:无法连接到Web服务器“IIS Express”
- ASP.NET MVC 5组单选button
- 将HTML表格发布到ADO.NET DataTable
- 如何configurationELMAH以使用Windows Azure? 我在Elmah.axd上得到了一个404
- 将Linqexpression式“obj => obj.Prop”转换为“parent => parent.obj.Prop”
- ASP.NET MVC – 附加types“MODELNAME”的实体失败,因为另一个相同types的实体已经具有相同的主键值
- 与IdentityDbContext合并MyDbContext
- RSS源在ASP.NET MVC