Рендеринг одного частичного представления в двух различных сильно набранных видах
-
27-09-2019 - |
Вопрос
У меня очень напечатанный вид человека, что я хочу сделать частичной в:
Вид человека (сильно напечатанный как человек)
<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>
Другие советы
Не могли бы вы просто сохранить все свои взгляды, которые сильно набираются, позволяя обеим типам моделей, которые вы хотите рендер в своем представлении рендеринга, реализуйте интерфейс, и пусть адреса частично использует этот интерфейс в качестве типа модели?