即使我通过另一个模型,Ajax.BeginForm 响应也包含以前的值
Posted
技术标签:
【中文标题】即使我通过另一个模型,Ajax.BeginForm 响应也包含以前的值【英文标题】:Ajax.BeginForm response contains previous values even if I pass another model 【发布时间】:2011-11-29 22:40:27 【问题描述】:我有一个简单的动作:
[HttpPost]
public virtual ActionResult New(Feedback feedback)
feedback.CreatedDate = DateTime.UtcNow;
if (TryValidateModel(feedback))
FeedbackRepository.Add(feedback);
var model = new Feedback
SuccessfullyPosted = true
;
return PartialView(MVC.Shared.Views._FeedBackForm, model);
return PartialView(MVC.Shared.Views._FeedBackForm, feedback);
因此,如果接收到的数据验证良好,则返回带有空反馈实体的部分视图。 问题是,如果我查看萤火虫响应,我看到旧值又回来了,这有多奇怪?
表格如下:
@using (Ajax.BeginForm(MVC.Feedback.New(), new AjaxOptions UpdateTargetId = "contactsForm", HttpMethod =“发布” ))@html.LabelFor(x => x.FirstName) @Html.EditorFor(x => x.FirstName) @Html.ValidationMessageFor(x => x.FirstName)
@Html.LabelFor(x => x.LastName) @Html.EditorFor(x => x.LastName) @Html.ValidationMessageFor(x => x.LastName)
@Html.LabelFor(x => x.Email) @Html.EditorFor(x => x.Email) @Html.ValidationMessageFor(x => x.Email)
@Html.LabelFor(x => x.Phone) @Html.EditorFor(x => x.Phone) @Html.ValidationMessageFor(x => x.Phone)
@Html.LabelFor(x => x.Comments) @Html.TextAreaFor(x => x.Comments, new cols = 60, rows = 10 ) @Html.ValidationMessageFor(x => x.Comments)
if (Model.SuccessfullyPosted) 反馈发送成功。
是否有可能以某种方式禁用此行为以及PartialView(MVC.Shared.Views._FeedBackForm, model)
如何设法获得不同的模型?
更新:我看到 *** 从视图中吃掉了所有 html,但找不到解决方法。
【问题讨论】:
【参考方案1】:ModelState
是模型值的主要供应商。即使您将模型传递给View
或PartialView
,EdiorFor
也会首先查看ModelState
以获取相应的属性值,如果它不存在,则只会查看模型本身。发布到控制器时会填充 ModelState(旧反馈)。即使您创建新反馈并将其作为模型传递,ModelState
已经包含来自先前发布的反馈的值,因此您会在客户端获得旧值。在成功发布结果之前清除模型状态将对您有所帮助。
FeedbackRepository.Add(feedback);
var model = new Feedback
SuccessfullyPosted = true
;
ModelState.Clear(); // force to use new model values
return PartialView(MVC.Shared.Views._FeedBackForm, model);
查看this 和this 链接了解相关情况的示例
【讨论】:
以上是关于即使我通过另一个模型,Ajax.BeginForm 响应也包含以前的值的主要内容,如果未能解决你的问题,请参考以下文章
jQuery.Ajax与Ajax.beginform一起使用不引人注目的JavaScript
在 Ajax.BeginForm 中传递 UpdateTargetId 不替换目标
ASP.NET MVC 3 Ajax.BeginForm 意外重置模型值