部分视图不呈现

时间:2009-06-24 03:38:39

标签: asp.net-mvc

在我的观点中,我有:

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

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

<%
       }
   }
 %>

首先,我不确定我是否有&lt; %%&gt;右。

其次,在我的Partial View Textbox.ascx中,我强烈地将它输入到我的ViewModel类,就像我在View ...相同的ViewModel类中一样。我的ViewModel类具有Personas类型的Property。所以我假设因为我将ap(类型为Personas)传递给我的RenderPartial作为传递给它的对象,只要我强烈输入我的部分视图并且该对象(这是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>

最后,所以我尝试了所有这些。但没有任何东西被渲染我不知道为什么。我不知道我的视图中是否只是语法错误,或者我没有传递有效数据,或者我的部分视图中是否正确连接到传递的对象。

2 个答案:

答案 0 :(得分: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); 

       }
   }
 %>

答案 1 :(得分:1)

视图应继承自ViewUserControl<Personas>

在视图中,模型指向每个角色实例

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