Может кто-то, пожалуйста, помогите мне понять это. У меня есть следующий код: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>
Данные размещены с тем, что я типа в двух областях , Но затем я заменяю значение свойства 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. Установка этого параметра в true приводит к той же проблеме, что и в обсуждении.
Почему это происходит и каков правильный способ обойти эту проблему? Мое обходное решение отлично работает, но я хотел бы понять проблему.