誰かがこれを理解するのを手伝ってくれませんか。次のコードがあります。
コントローラー
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>
データは、2 つのフィールドに入力した内容とともに投稿されます。しかし、Address プロパティの値を「Some Address」に置き換えて、古いビューを置き換える新しいビューを取得することが期待される PartialView を返します。これはおそらく発生しますが、古いものを置き換えるビューには新しい「Some Address」値が含まれていません。私が投稿したビューとまったく同じように見えます。
回避策はありますが、ここで何が起こっているのかを理解したいです。私の回避策は次のとおりです。
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 の最後のパラメーターとして false を使用してキャッシュをバイパスできます。このパラメーターを true に設定すると、説明した問題と同じ問題が発生します。
この問題が発生する理由と、この問題を回避する正しい方法は何ですか? 私の回避策はうまくいきますが、問題を理解したいと思います。