我正在尝试模仿webforms多视图功能,我能想到的唯一方法是将PartialView放入ViewData对象中?如下所示:
查看代码:
<%= ViewData["PartialViewPlaceholder"] %>
控制器代码:
if(//condition){
ViewData["PartialViewPlaceholder"] = partialView1;
} else {
ViewData["PartialViewPlaceholder"] = partialView2;
}
你会怎么做?
答案 0 :(得分:1)
ViewData旨在包含实际的数据,而不包含视图本身,其中包含标记和呈现代码。你不可能这样做:
public ActionResult MyActionMethod()
{
var model = new MyModel();
model.UsePartialView1 = false; // Tell the view not to use Partial View 1
return View("MyView", model);
}
在视图中MyView
:
<% if (Model.UsePartialView1)
Html.RenderPartial("PartialView1", Model);
else
Html.RenderPartial("PartialView2", Model); %>
这将使用相同的模型呈现PartialView1
或PartialView2
,具体取决于Controller设置的条件。
或者,要从控制器返回带有直接的部分视图,而不是普通的视图,您可以这样做:
public ActionResult MyActionMethod()
{
var model = ...
ViewData["MyViewData"] = ...
return PartialView("PartialView1", model);
}
这会将Partial View PartialView1直接返回给客户端。这在AJAX场景中非常有用,因为结果很可能不是整个HTML页面。部分视图是.ascx
个文件。