有人可以帮我理解这一点。我有以下代码:
控制器
public ActionResult Stuff(PersonModel model)
{
model.Address = "Some Address";
return PartialView("_Registration", model);
}
风景
@Ajax.BeginForm("Stuff", new AjaxOptions(){ HttpMethod="POST", UpdateTargetId="the_form", InsertionMode=InsertionMode.Replace, OnSuccess="Stuff" })
{
<div id="the_form">
@{Html.RenderPartial("_Registration", new TypeScriptTest.Models.PersonModel());}
</div>
<input type="submit" value="Get Addreess" />
}
局部视图
@model TypeScriptTest.Models.PersonModel
<table>
<tr>
<td>
Name:
</td>
<td>
@Html.TextBoxFor(c => c.Name)
</td>
</tr>
<tr>
<td>
Address:
</td>
<td>
@Html.TextBoxFor(c => c.Address)
</td>
</tr>
</table>
数据与我在两个字段中键入的任何内容一起发布。但随后我将 Address 属性值替换为“Some Address”并返回一个 PartialView,我希望得到一个替换旧视图的新视图。这可能会发生,但替换旧的视图不包括新的“某些地址”值。它看起来与我发布的视图完全相同。
我有一个解决方法,但我想了解这里发生了什么。我的解决方法如下:
public ActionResult Stuff(PersonModel model)
{
model.Address = "Some Address";
var v = PartialView("_Registration");
var view = v.ViewEngineCollection.OfType<System.Web.Mvc.RazorViewEngine>().Single().FindPartialView(new ControllerContext(HttpContext, RouteData, this), "_Registration", false);
var result = new PartialViewResult() { View = view.View };
result.ViewData.Model = model;
return result;
}
在这里,我可以使用 false 作为 FindPartialView 中的最后一个参数来绕过缓存。将此参数设置为 true 会导致与讨论中的问题相同的问题。
为什么会发生这种情况以及解决此问题的正确方法是什么?我的解决方法工作正常,但我想了解这个问题。