【问题标题】:Refresh A View/Partial View without using Ajax or Submit in MVC在不使用 Ajax 或在 MVC 中提交的情况下刷新视图/部分视图
【发布时间】:2014-08-26 05:01:49
【问题描述】:

我有一个包含不同类型列表的 ViewModel

当第一次加载页面时,我想根据选择的下拉列表显示数据列表。

当下拉菜单发生变化时,我想显示特定于该类型的数据列表。

但我不想去我的控制器,因为在那种情况下我需要进行搜索/查询,因为我的视图中已经有了所有类型。

我该怎么做?

任何建议。

谢谢,

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-viewmodel


    【解决方案1】:

    如果您不想访问服务器(ajax\submit),那么您需要下载所有数据(在第一个响应中)并使用 javascript 更改列表。

    When the select box's change occurs, you javascript will need to get the selected value and update the new list to work against it.

    这是一个例子:

    HTML:

    <select id="s1"></select>
    <select id="s2"></select>
    

    JS:

    var currData = ["1", "2", "3"];
    var otherData = [
        ["a", "b", "c"],
        ["d", "e", "f"],
        ["g", "h", "i"]
    ]
    
    
    for (var i = 0; i < currData.length; i++) {
        var option = $('<option value="' + currData[i] + '">' + currData[i] + '</option>');
        $("#s1").append(option);
    }
    // s1 and s2 are the same when the page loads.
    $('#s2').html($('#s1').html());
    
    $('#s1').change(function () {
        var idx = currData.indexOf($(this).val());
        var newSelectData = otherData[idx]; // change s2 due to s1's selection
        $('#s2').children().remove(); // clear the s2 select box
        for (var i = 0; i < newSelectData.length; i++) {
            var option = $('<option value="' + newSelectData[i] + '">' + newSelectData[i] + '</option>');
            $("#s2").append(option);
        }
    });
    

    JSFIDDLE.

    【讨论】:

    • 您的意思是首先显示所有数据并隐藏不需要的数据?并在 jquery 中使用隐藏/显示?
    • @ArijitMukherjee,这将是不调用您的控制器的唯一方法,但您为什么不想这样做?
    • 我已经编辑并添加了一个小例子。我不确定这是否正是您想要的,但它会帮助您了解应该如何执行此操作。
    • 问题是当我使用 ajax 时,我的价值不会从一个视图持续到另一个视图不止一次。有一次可以使用 TempData 来实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2011-08-17
    • 2012-07-19
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多