문제

I have a strongly typed Person view, that I want to render a partial in:

Person View (strongly typed as person)

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

AddressForm View (untyped, because I also want to use this in the Distributor strongly typed view)

When I try to call this partial from the Person view, I get this error:

Compiler Error Message: CS1963: An expression tree may not contain a dynamic operation

Source Error:

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> 

How can I get this partial to render so that I can use my partial addressView across multiple other types?

Edited:

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

Error is above.

도움이 되었습니까?

해결책

you can't use strongly typed helpers with dynamic viewmodel:

you can use non strongly typed helpers instead, like this:

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

다른 팁

Couldn't you simply keep all your views strongly typed by letting both the model types that you want to render in your AddressForm view implement an interface, and let the AddressForm partial use that interface as its model type?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top