Рендеринг одного частичного представления в двух различных сильно набранных видах

StackOverflow https://stackoverflow.com/questions/3857705

Вопрос

У меня очень напечатанный вид человека, что я хочу сделать частичной в:

Вид человека (сильно напечатанный как человек)

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

Регистрация View (Untyped, потому что я также хочу использовать это в дистрибьюторе сильно напечатанный вид)

Когда я пытаюсь позвонить в этот частичный от представления человека, я получаю эту ошибку:

Сообщение об ошибке компилятора: 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> 

Как я могу получить этот частичный для рендеринга, чтобы я мог использовать свой частичный адрес View через несколько других типов?

Отредактировано:

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

Ошибка выше.

Это было полезно?

Решение

Вы не можете использовать настоятельно напечатанные помощники с динамическим ViewModel:

Вместо этого вы можете использовать не сильно напечатанные помощники, как это:

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

Другие советы

Не могли бы вы просто сохранить все свои взгляды, которые сильно набираются, позволяя обеим типам моделей, которые вы хотите рендер в своем представлении рендеринга, реализуйте интерфейс, и пусть адреса частично использует этот интерфейс в качестве типа модели?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top