Question

J'ai vue fortement typé Personne, que je veux rendre une partie dans:

Person View (fortement typé comme personne)

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

Voir AddressForm (typées, parce que je veux aussi l'utiliser dans le distributeur vue fortement typé)

Quand je tente d'appeler cette partie de la vue personne, je reçois cette erreur:

Compiler Message d'erreur: CS1963: Un arbre d'expression ne peut pas contenir une opération dynamique

Erreur source:

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> 

Comment puis-je obtenir ce partielle render afin que je puisse utiliser mon addressView partiel sur plusieurs autres types?

Modifié:

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

Erreur est au-dessus.

Était-ce utile?

La solution

vous ne pouvez pas utiliser les aides fortement typé avec viewmodel de dynamique:

vous pouvez utiliser à la place des aides non fortement typés, comme ceci:

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

Autres conseils

Ne pourriez-vous simplement garder tous vos points de vue fortement typés en laissant les deux types de modèle que vous voulez rendre dans votre vue AddressForm implémenter une interface, et laisser la AddressForm utilisation partielle de cette interface comme type de modèle?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top