ASP.NET MVC 3 Ajax.BeginForm 意外重置模型值
Posted
技术标签:
【中文标题】ASP.NET MVC 3 Ajax.BeginForm 意外重置模型值【英文标题】:ASP.NET MVC 3 Ajax.BeginForm resetting model values unexpectedly 【发布时间】:2012-09-22 07:19:25 【问题描述】:我有一个包含以下 sn-p 的部分视图:
@model Mbrrace.Domain.MbrraceForm
<div class="row">
<div class="span12 form-horizontal">
@using (Ajax.BeginForm("DetailsSection11", "DataForm",
new AjaxOptions
HttpMethod = "POST",
OnComplete = "NextTab"
))
在调用显示此局部视图的视图的控制器中,一些模型值已预设但未显示或以其他方式使用。当 Ajax 提交发生时,其中一些值已被清除(整数变为零,字符串变为空),但保留了日期值。正确返回表单本身中设置的值。
我已经检查了预设值在到达表单时是否正确,使用@html.DisplayFor 显示它们。
我在解决方案的其他地方使用 Ajax.BeginForm 和模型,完全没有问题。我在提交之前和之后检查了 ModelState 并且它是有效的。我也试过 ModelState.Clear() 没有效果。
在我把头发剩下的一点点撕掉之前,任何想法可能是什么问题。
【问题讨论】:
【参考方案1】:如果表单中的这些值没有对应的输入字段,那么当您发布表单时,它们将永远不会提交到服务器。因此,默认模型绑定器将无法从请求中绑定您的模型,当然所有这些属性都将具有其默认值。所以你有几种可能性:
将这些属性作为隐藏字段包含在表单中。 在 POST 控制器操作中从您在 GET 操作(数据库或其他东西)中提取它们的任何位置获取它们。【讨论】:
谢谢 - 我很困惑那个日期正在返回一个值。但是,现在都已排序以上是关于ASP.NET MVC 3 Ajax.BeginForm 意外重置模型值的主要内容,如果未能解决你的问题,请参考以下文章
我们是不是正在使用 .Net 3.5 中的 MVC 框架转向经典 ASP?
(转)表单和HTML辅助方法 - ASP.NET MVC 3
ASP .NET 5 MVC 6 Identity 3 Roles Claims Groups [关闭]