动态地同时返回多个PartialViews

时间:2014-06-24 09:02:34

标签: javascript jquery asp.net-mvc-4

我参与MVC4项目。

目前,我通过jQuery动态返回PartialViews(包含带数据的表)。

这是设置:

$('#selector').change(function () {

    var selectedValue = $(this).val();

    if (selectedValue == "def") {
        $('#result').text("Välj ett språk för att visa substanstabell..");
    } else if (selectedValue == "sv") {
        $('#spin').show();
        $.get('/SubstanceValidation/svSubstances/' + selectedValue, function (data) {
            $('#result').html(data);
            $('#spin').hide();
            $('#result').fadeIn('fast');
        });
    } else if (selectedValue == "en") {
        $('#spin').show();
        $.get('/SubstanceValidation/enSubstances/' + selectedValue, function (data) {

            $('#result').html(data);
            $('#spin').hide();
            $('#result').fadeIn('fast');
        });
    } else if (selectedValue == "fi") {
        $('#spin').show();
        $.get('/SubstanceValidation/fiSubstances/' + selectedValue, function (data) {

            $('#result').html(data);
            $('#spin').hide();
            $('#result').fadeIn('fast');
        });
    } else if (selectedValue == "fp") {
        $('#spin').show();
        $.get('/SubstanceValidation/fpSubstances/' + selectedValue, function (data) {

            $('#result').html(data);
            $('#spin').hide();
            $('#result').fadeIn('fast');
        });
    } else if (selectedValue == "ge") {
        $('#spin').show();
        $.get('/SubstanceValidation/geSubstances/' + selectedValue, function (data) {

            $('#result').html(data);
            $('#spin').hide();
            $('#result').fadeIn('fast');
        });
    }
});

这很好用。

现在,我希望我的<input type="button" id="getAllBtn" value="Get all" />返回所有PartialViews并立即在结果<div>中呈现它们。我尝试了以下但没有取得任何成功:

$('#getAllBtn').click(function () {
    $('#spin').show();
    $.get('/SubstanceValidation/svSubstances/' + '/SubstanceValidation/enSubstances/' + '/SubstanceValidation/fiSubstances/' + '/SubstanceValidation/fpSubstances/' + '/SubstanceValidation/geSubstances/', function (data) {
        $('#result').html(data);
        $('#spin').hide();
        $('#result').fadeIn('fast');
    });
});

任何帮助表示赞赏!感谢。

2 个答案:

答案 0 :(得分:1)

首先,您必须意识到在MVC中,一个动作方法只能返回一个且只有一个ActionResult对象...因此,您一次只能返回一个局部视图。考虑到这一点,您唯一的选择(我认为)是创建另一个PartialView来调用/呈现您想要渲染的所有其他部分视图。然后,创建一个返回此&#34; master&#34;局部视图

public ActionResult AllSubstances(){...}

然后从jQuery调用此操作方法......

$('#getAllBtn').click(function () {
    $('#spin').show();
    $.get('/SubstanceValidation/AllSubstances/', function (data) {
        $('#result').html(data);
        $('#spin').hide();
        $('#result').fadeIn('fast');
    });
});

希望有所帮助

答案 1 :(得分:0)

脏代码......

首先,我建议你在更改事件中合并ajax请求部分,例如:

$('#selector').change(function () {

    var selectedValue = $(this).val();

    if (selectedValue == "def") {
        $('#result').text("Välj ett språk för att visa substanstabell..");
    } else {
        $('#spin').show();
        $.get('/SubstanceValidation/' + selectedValue + 'Substances/' + selectedValue, function (data) {
            $('#result').html(data);
            $('#spin').hide();
            $('#result').fadeIn('fast');
        });
    }
});

现在回到您的主题,您可以通过请求所有网址并将返回数据附加到div来执行此操作:

 var allUrls=["sv","en","fi"......];
 for(var i=0;i<allUrls.length;i++){
    $.get('/SubstanceValidation/AllSubstances/', function (data) {
      $('#result').append(data);//do not use html because it will replace last request
      $('#spin').hide();
      $('#result').fadeIn('fast');
    });
 }

但它不是最好的解决方案,因为你无法控制显示顺序(你不知道哪个ajax请求更快),如果顺序很重要,你应该编写一个新的Action来返回所有数据,就像@利奥说。