您可以将部分视图放入ViewData对象吗?

时间:2010-08-18 16:04:35

标签: asp.net-mvc partial-views viewdata

我正在尝试模仿webforms多视图功能,我能想到的唯一方法是将PartialView放入ViewData对象中?如下所示:

查看代码:

<%= ViewData["PartialViewPlaceholder"] %>

控制器代码:

if(//condition){    
    ViewData["PartialViewPlaceholder"] = partialView1;
} else {
    ViewData["PartialViewPlaceholder"] = partialView2;
}

你会怎么做?

1 个答案:

答案 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); %>

这将使用相同的模型呈现PartialView1PartialView2,具体取决于Controller设置的条件。

或者,要从控制器返回带有直接的部分视图,而不是普通的视图,您可以这样做:

public ActionResult MyActionMethod()
{
    var model = ...
    ViewData["MyViewData"] = ...
    return PartialView("PartialView1", model);
}

这会将Partial View PartialView1直接返回给客户端。这在AJAX场景中非常有用,因为结果很可能不是整个HTML页面。部分视图是.ascx个文件。