Вот мой сценарий: у меня есть представление с выпадающим списком, и когда пользователь выбирает элемент в списке, я хочу динамически вставить частичное представление, строго типизированное с той же моделью, что и родительское представление. Я думал, что это довольно распространенный сценарий, и его было бы довольно легко сделать, но я мог ошибаться (или просто неопытен).
Подход, который я попробовал, состоял в том, чтобы использовать этот скрипт (jQuery), который запускается в событии onchange списков:
function loadPartial() {
var id = $("#MyClass_MyClassId").val();
var prop = $("#MyClass_MyProperty").val();
$("#partials").load('/MyController/LoadPartial/?val=' + prop);
}
Этот скрипт вызывает действие контроллера, которое возвращает соответствующее частичное представление и вставляет его в заданный div (id = partials).
Проблема: Модель в динамически вставленных частичных видах кажется пустой.
Вот один из строго типизированных частичных видов, которые я вставляю (модель, используемая частичными видами, такая же, как модель родительских видов):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyNamespace.Controllers.MyViewModel>" %>
<div class="editor-label">
<label>Enter Data*</label>
</div>
<div class="editor-field">
<%=Html.TextAreaFor(model => model.MyClass.MyProperty)%>
<%=Html.ValidationMessageFor(model => model.MyClass.MyProperty)%>
</div>
Я не уверен, является ли этот подход лучшим или есть ли лучший способ сделать это (например, использовать RenderPartial). Я не хочу восстанавливать модель в действии контроллера, потому что я потеряю все сообщения проверки. Я провел довольно тщательный поиск решения, которое соответствовало бы моим требованиям, но я не смог найти его, поэтому любые рекомендации / предложения будут высоко оценены.