在两个不同的强类型视图中渲染一个局部视图

Posted

技术标签:

【中文标题】在两个不同的强类型视图中渲染一个局部视图【英文标题】:Rendering one partial view in two different strongly typed views 【发布时间】:2010-10-04 17:39:49 【问题描述】:

我有一个强类型的 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> 

我怎样才能让这个部分呈现,以便我可以在多种其他类型中使用我的部分 addressView?

已编辑:

// 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>

上面有错误。

【问题讨论】:

【参考方案1】:

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

您可以改用非强类型帮助器,如下所示:

<%@ 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 部分使用该接口作为其模型类型来保持所有视图的强类型吗?

【讨论】:

+1 我会怎么做。即 " %>.. 或类似的,其中 IAddress 是您的任何地址模型类都继承自的接口。

以上是关于在两个不同的强类型视图中渲染一个局部视图的主要内容,如果未能解决你的问题,请参考以下文章

ASP MVC 中的强类型视图

如何在没有模型的情况下验证 MVC3 中的强类型视图

MVC 新手关于强类型视图的问题

MVC 在 EditorFor 中渲染局部视图

ASP.NET MVC 强类型视图与否?

MVC 电影教程和强类型视图