0

我正在尝试模仿 webforms 多视图功能,我能想到的唯一方法是将 PartialView 放入 ViewData 对象中?类似于以下内容:

查看代码:

<%= ViewData["PartialViewPlaceholder"] %>

控制器代码:

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

你会怎么做?

4

1 回答 1

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

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

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

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

于 2010-08-18T16:08:22.997 回答