有人可以幫我理解這一點。我有以下代碼:MVC HttpPost修改模型並替換視圖
控制器
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>
的數據公佈與任何我在這兩個字段中鍵入。但是,然後我用「Some Address」替換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;
}
在這裏,我可以用假作爲FindPartialView最後一個參數繞過緩存。將此參數設置爲true會導致與討論中相同的問題。
這是怎麼回事?解決這個問題的正確方法是什麼?我的解決方法工作正常,但我想了解問題。