2009-06-24 93 views
1

在我看來,我有:PartialView不渲染

<% 
    foreach (Personas p in Model.Personas) { 
     if (p.DisType == DisType.TextArea) { 
%> 

<% Html.RenderPartial("~/Views/Shared/Controls/Custom/xxx/Textbox.ascx", p); %> 

<% 
     } 
    } 
%> 

首先我不知道,我有<%%>的權利。

其次,在我的Partial View Textbox.ascx中,我強烈地將它類型化爲我的ViewModel類,就像我在View中一樣。ViewModel類。我的ViewModel類有一個Personas類型的Property。所以我認爲,因爲我將ap(Personas類型)傳遞給我的RenderPartial作爲傳遞給它的對象,只要我強制鍵入了Partial View並且該對象(ViewModel clas)具有該類型(角色),我現在可以在我的部分視圖中執行此操作:

<fieldset> 
    <div> 
     <span>*</span><label><%=Model.Personas.Name %></label> 
     <p><%=Model.Personas.Info %></p> 
    </div> 
    <div> 
     <%=Html.TextBox(Model.Personas.Name, "", 
       new { name=Model.Personas.Name, id= Model.Personas.Id, 
         size = Model.Personas.Size1 })%> 
    </div> 
</fieldset> 

最後,我嘗試了所有這些。但沒有得到渲染。我不知道爲什麼。我不知道我的視圖中是否有語法錯誤,或者我沒有傳遞有效的數據,或者在我的部分視圖中沒有正確連接傳遞的對象。

+0

您應該對同一個線程保留關於同一問題的問題;) – womp 2009-06-24 04:07:18

回答

1

你的假設是不正確的。如果您將模型中的「Personas」類型傳遞給您的局部視圖,那麼它需要繼承System.Web.Mvc.ViewUserControl<Personas>,與父視圖的類型不同。局部視圖不能只是「知道」你的父視圖模型類型具有Personas類型的屬性,並且不知何故將你傳入的對象映射到該屬性。

而且,由於你沒有文字文本的服務器標籤之間被渲染,那麼您可以縮短標籤簡單:

<% 
    foreach (Personas p in Model.Personas) { 
     if (p.DisType == DisType.TextArea) { 

     Html.RenderPartial("~/Views/Shared/Controls/Custom/xxx/Textbox", p); 

     } 
    } 
%> 
+0

謝謝,我忘了將.ascx添加到RenderPartial標籤。我改變了我的PartialView,期望類型Personas仍然,並擺脫了不必要的<% %>,但我沒有得到任何渲染。 – PositiveGuy 2009-06-24 04:10:23

1

查看應從ViewUserControl<Personas>

和wiew內的示範點繼承製作人物角色的實例

<span>*</span><label><%=Model.Name %></label>