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);
}
Это вернет Partial View PartialView1 непосредственно клиенту. Это в основном полезно в сценариях AJAX, поскольку результатом, скорее всего, будет не вся HTML-страница. Частичные виды - это .ascx
файлов.