【发布时间】:2011-04-25 02:45:33
【问题描述】:
这是我的场景:我有一个带有下拉列表的视图,当用户在列表中选择一个项目时,我想动态插入一个局部视图,该视图使用与父视图相同的模型进行强类型化。我认为这是一个相当常见的场景,并且很容易做到,但我可能弄错了(或者只是没有经验)。
我尝试的方法是使用这个脚本 (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)。我不想在控制器操作中重新生成模型,因为我会丢失任何验证消息。我确实对符合我要求的解决方案进行了相当彻底的搜索,但我无法找到一个,因此任何建议/建议将不胜感激。
【问题讨论】: