在两个不同的强类型视图中呈现一个部分视图

5

我有一个强类型的Person视图,我想要渲染一个部分视图:

Person视图(强类型为person)

<label for="name">Name</label>
    <% Html.RenderPartial("AddressForm"); %>
</label>

AddressForm视图(未定义类型,因为我还想在Distributor强类型视图中使用它)

当我试图从Person视图调用此部分时,我会收到以下错误:

编译器错误消息:CS1963:表达式树可能不包含动态操作

源代码错误:

Line 8:    </div>  
Line 9:    <div class="editor-field">  
Line 10:       <%= Html.TextBoxFor(model => model.addressLine1) %>  
Line 11:       <%: Html.ValidationMessageFor(model => model.addressLine1) %>  
Line 12:   </div> 

我该如何渲染这个partial,以便我可以在多种其他类型中使用我的地址视图partial?

编辑:

// GET: /Person/Create  

public ActionResult Create()  
{
    Person person = new Person();       
    return View(person);  
}  

//Person create view  
<% Html.RenderPartial("AddressForm"); %>

//AddressForm Partial
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>

<fieldset>  
    <legend>Address</legend>   
    <div class="editor-label">  
        <label for="addressLine1" class="addressLabel">Address Line 1</label>  
    </div>  
    <div class="editor-field">  
        <%= Html.TextBoxFor(model => model.addressLine1) %>  
        <%: Html.ValidationMessageFor(model => model.addressLine1) %>
    </div>
</fieldset>

错误在上面。

2个回答

3

您不能在动态视图模型中使用强类型帮助程序:

您可以改用非强类型帮助程序,像这样:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>

<fieldset>
<legend>Address</legend>
<div class="editor-label">
<label for="addressLine1" class="addressLabel">
Address Line 1</label>
</div>
<div class="editor-field">
<%= Html.TextBox("addressLine1") %>
<%: Html.ValidationMessage("addressLine1") %> </div>
</fieldset>

2

如果您想让AddressForm视图渲染多个模型类型,您可以让这些模型类型实现同一个接口,并让AddressForm部分视图使用该接口作为其模型类型,这样就可以保持所有视图的强类型。


刚接触MVC和.NET。我会在这里搜索一个相关的示例。谢谢! - Andy Poquette
+1 正是我会做的方式。例如 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IAddress>" %> 或类似的方式,其中 IAddress 是任何地址模型类继承的接口。 - jim tollan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接