从MVC中的模型数据中选定的下拉列表项动态更改视图

时间:2012-07-25 22:41:35

标签: c# javascript html asp.net-mvc asp.net-mvc-3

我不确定我是否正确地解决了这个问题,如果解释似乎缺乏,请耐心等待。我在MVC-3上还有点新鲜。

我有一个MVC页面,我不确定从模型生成具有正确行为的View的最佳方法是什么。该模型包含一个文本字段类列表,每个类包含一组要在视图中显示的文本字段(例如" HeadlineText"," ButtonText"," ColorText& #34;等。文本字段类的列表是针对用户设置的每种唯一语言,以便他们可以为每种不同的语言创建一组文本字段。

在视图中有一个下拉列表,其中包含文本字段类列表中的每个语言/对象,我想根据在drop中选择的语言选项更改视图中显示的文本字段-down-list(并相应地动态更改)。

我原来的计划是在模型视图中为列表中的所有对象生成html,并使用javascript来隐藏/取消隐藏不属于drop中所选语言的文本字段集 - 向下列表。我不太喜欢在页面上生成一堆额外的html的想法,因为它可以通过javascript进行更改,但我没有看到任何其他方法来更新视图重新加载/重新生成视图(我试图让它看起来异步,没有回发)。

更新

关于部分观点的建议似乎是我想要的,但我仍然想知道其他评论者没有投入的东西。也就是说,如果我想要部分视图,我仍然需要将文本字段绑定到父模型中的数据,并且(可能使用编辑器模板)仍然可以修改它们并在父视图/模型/时保存表格已提交保存。

我在bit.ly/N5DY5a和bit.ly/SVYqdT上读了一些其他的东西。如果我正确理解它们,我应该能够将文本字段列表对象或父模型传递给局部视图,以便视图将为正确的字段生成编辑器模板,并仍然将它们绑定到父模型,以便提交父表单后会保存吗?我还没有得到任何工作,但我还在努力......

2 个答案:

答案 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)

您可以使用Ajax的部分视图来完成此任务。

为每种语言创建局部视图,然后根据用户选择进行Ajax调用,以部分视图更新/替换页面的一段。

more about partial views