Rendering one partial view in two different strongly typed views
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>" %>
<fie开发者_运维知识库ldset>
<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?
精彩评论