2010-08-18 3 views
0

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

Посмотреть код:

<%= ViewData["PartialViewPlaceholder"] %> 

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

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

Как бы вы об этом?

ответ

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 с использованием той же модели в зависимости от состояния, установленного контроллером ,

Или вернуть частичный вид с моделью непосредственно из контроллера, вместо нормального View, вы можете сделать это:

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

Это вернет Partial View PartialView1 непосредственно клиенту , Это в основном полезно в сценариях AJAX, поскольку результат, скорее всего, не будет всей HTML-страницей. Частичные виды: .ascx.

+0

В идеале мне нужно управлять визуализированным PartielView через контроллер. Как это можно сделать? – shahidaltaf

+0

@ shahid81 Зачем вам это нужно? Каков ваш сценарий? Вы все же можете контролировать, какой частичный вид визуализируется * через контроллер *, используя описанный мной метод, если только Контроллер определяет, выполняется ли условие. – bzlm

+0

У меня небольшая форма с несколькими результатами, разными экранами подтверждения, но я не хочу иметь разные URL-адреса. Подобно веб-формам, использующим Multiviews. – shahidaltaf