我不确定我是否正确地解决了这个问题,如果解释似乎缺乏,请耐心等待。我在MVC-3上还有点新鲜。
我有一个MVC页面,我不确定从模型生成具有正确行为的View的最佳方法是什么。该模型包含一个文本字段类列表,每个类包含一组要在视图中显示的文本字段(例如" HeadlineText"," ButtonText"," ColorText& #34;等。文本字段类的列表是针对用户设置的每种唯一语言,以便他们可以为每种不同的语言创建一组文本字段。
在视图中有一个下拉列表,其中包含文本字段类列表中的每个语言/对象,我想根据在drop中选择的语言选项更改视图中显示的文本字段-down-list(并相应地动态更改)。
我原来的计划是在模型视图中为列表中的所有对象生成html,并使用javascript来隐藏/取消隐藏不属于drop中所选语言的文本字段集 - 向下列表。我不太喜欢在页面上生成一堆额外的html的想法,因为它可以通过javascript进行更改,但我没有看到任何其他方法来更新视图重新加载/重新生成视图(我试图让它看起来异步,没有回发)。
更新
关于部分观点的建议似乎是我想要的,但我仍然想知道其他评论者没有投入的东西。也就是说,如果我想要部分视图,我仍然需要将文本字段绑定到父模型中的数据,并且(可能使用编辑器模板)仍然可以修改它们并在父视图/模型/时保存表格已提交保存。
我在bit.ly/N5DY5a和bit.ly/SVYqdT上读了一些其他的东西。如果我正确理解它们,我应该能够将文本字段列表对象或父模型传递给局部视图,以便视图将为正确的字段生成编辑器模板,并仍然将它们绑定到父模型,以便提交父表单后会保存吗?我还没有得到任何工作,但我还在努力......
答案 0 :(得分:1)
使用视图第一次呈现页面。
然后,当您选择的值发生变化时,请使用ajax获取新内容。
现在使用局部视图渲染被修改的页面部分。
您的局部视图包含与您的视图相同的标记,但只包含已修改的部分。
在控制器中:
//get data
if (!Request.IsAjaxRequest())
{
return View(data);
}
else
{
return PartialView("myPartialView", data);
}
在视图中:
HTML :
...
<div id="partialView"></div>
...
jQuery :
<script type="text/javascript">
$(function () {
$('#myDropdownlist').change(function () {
$.get('/controller/action' + $(this).find(':selected').val(), function (data) {
$('#partialView').html(data);
}
});
});
</script>
答案 1 :(得分:1)