2010-10-04 64 views
4
一个局部视图

我一个强类型的人来看,我想渲染的部分在:呈现两种不同的强类型的意见

人称视角(强类型的人)

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

为AddressForm查看(非类型化的,因​​为我也想在经销商使用这个强类型的视图)

当我尝试调用从该人士看来这个部分,我得到这个错误:

编译器错误信息: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> 

误差高于。

+0

请张贴更多的代码 – Omu 2010-10-04 17:53:39

回答

2

不能使用强类型的辅助动态视图模型:

可以使用非强类型的辅助,而不是像这样:

<%@ 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> 
+1

谢谢!这工作完美。 – 2010-10-04 18:21:26

+0

欢迎您:-) – Omu 2010-10-04 18:22:01

2

难道你不能简单地通过让你想要在AddressForm视图中呈现的模型类型实现一个接口并让AddressForm局部使用该接口作为其模型类型来强制类型化所有视图吗?

+0

< - 新来的MVC和.net。我会在这里搜索一个例子。谢谢! – 2010-10-04 17:57:20

+0

+1我该怎么做。即<%@ Control Language =“C#”Inherits =“System.Web.Mvc.ViewUserControl ”%> ..或类似的地方,其中IAddress是您的任何地址模型类继承的接口。 – 2010-10-04 20:55:05