Можете ли вы поместить PartialView в объект ViewData? - PullRequest
0 голосов
/ 18 августа 2010

Я пытаюсь имитировать функциональность многовидового отображения веб-форм, и единственный способ, о котором я могу думать, это поместить PartialView в объект ViewData? Примерно так:

Просмотр кода:

<%= ViewData["PartialViewPlaceholder"] %>

Код контроллера:

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

Как бы вы поступили об этом?

1 Ответ

1 голос
/ 18 августа 2010

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 файлов.

...