如何在一次调用特定控制器时呈现多个不同的动作? Html.RenderAction() / Html.Action()仅处理一个控制器和操作。 但是如果我想在一次调用中想要在屏幕上呈现不同的视图呢?
提前谢谢, Sagiv编辑:
嗨再次。
我不确定你理解我的问题。
这是cshtml:
<div id="menu">@using (Ajax.ActionLink("click me", "SomeAction","SomeController", new AjaxOptions() { HttpMethod = "POST", OnSuccess = "showMsg", OnFailure = "showError" }))</div>
<div id="div1">bla bla content</div>
....
<div id="div2">bla bla content</div>
,这是控制器:
public class SomeController : Controller
{
public ActionResult SomeAction()
{
return View("somethingfordiv1", ModelForDiv1);
return View("somethingfordiv2", ModelForDiv2); //i want also return another view here
}
}
在控制器上的这个ajax调用中,我想为2个不同的div返回2个不同的视图 再次感谢:)
答案 0 :(得分:2)
这是你可以继续的一种方式。您可以将两个视图模型聚合到一个唯一的视图模型中,然后让控制器操作返回一个包含javascript的视图,该视图会将两个视图结果注入到不同的div中。
一如既往地从视图模型开始:
public class Model1 { }
public class Model2 { }
public class AggregatedModel
{
public Model1 Model1 { get; set; }
public Model2 Model2 { get; set; }
}
然后是控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult SomeAction()
{
var model = new AggregatedModel
{
Model1 = new Model1(),
Model2 = new Model2()
};
Response.ContentType = "text/javascript";
return PartialView(model);
}
}
然后是相应的~/Views/Home/Index.cshtml
视图:
<div id="menu">
@Html.ActionLink("click me", "SomeAction", "Home", new { id = "clickme" })
</div>
<div id="div1">bla bla content</div>
<div id="div2">bla bla content</div>
<script type="text/javascript">
$('#clickme').click(function () {
$.getScript(this.href);
return false;
});
</script>
接下来是~/Views/Home/SomeAction.cshtml
视图:
@model AggregatedModel
$('#div1').html(@Html.Raw(Json.Encode(Html.Partial("Model1", Model.Model1).ToHtmlString())));
$('#div2').html(@Html.Raw(Json.Encode(Html.Partial("Model2", Model.Model2).ToHtmlString())));
最后是两个~/Views/Home/Model1.cshtml
和~/Views/Home/Model2.cshtml
观点:
@model Model1
<span>This is the contents for model1</span>
和
@model Model2
<span>This is the contents for model2</span>
答案 1 :(得分:0)
如果要在屏幕上呈现不同的视图,请返回表示这些视图的数据的模型,然后您可以使用RenderPartial并传递每个视图所需的部分模型数据。
您还可以使用viewdata单独提供此功能。
Html.RenderAction也可用但模拟另一个完整请求
对于你的ajax请求,你可以从部分视图的渲染中返回一个html块,这可以通过Request.IsAjaxRequest来确定。然后你的javascript可以将结果设置到文档中。
这是你的行动
if (Request.IsAjaxRequest())
{
return View("PartialViewName", partialModel);
}
return View("NormalView", normalModel);
客户端示例(使用jquery)
function hijack(form) {
$("div#SearchResults").html("");
$("div#SearchResults").addClass('loading');
$.ajax({
url: form.action,
type: form.method,
dataType: "html",
data: $(form).serialize(),
success: function(data) {
$("div#SearchResults").removeClass('loading');
$("div#SearchResults").html(data);
}
});
}