我参与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');
});
});
任何帮助表示赞赏!感谢。
答案 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来返回所有数据,就像@利奥说。