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 [关闭]

ASP.NET MVC 3 文件夹结构

ASP.NET Core MVC 入门到精通 - 3. 使用MediatR

ASP.NET MVC 3 和 NHibernate 脚手架