Je veux utiliser RenderPartial deux fois à mon avis avec différents modèles associés. Le problème est que certaines propriétés sont présentes dans les deux modèles (surnom, mot de passe). Ils n'ont pas de préfixe, alors même les identifiants ou les noms sont égaux dans la sortie. Maintenant, si j'ai des erreurs de modèle pour surnom ou mot de passe, les deux champs sont mis en surbrillance.
Vue principale: P>
<% using (Html.BeginForm("Register", "Member")) { %> <fieldset> <legend>Register</legend> <p> <%= Html.LabelFor(x => x.Nickname) %> <%= Html.TextBoxFor(x => x.Nickname) %> </p> <p> <%= Html.LabelFor(x => x.Email) %> <%= Html.TextBoxFor(x => x.Email) %> </p> <p> <%= Html.LabelFor(x => x.Password) %> <%= Html.PasswordFor(x => x.Password) %> </p> <p> <%= Html.LabelFor(x => x.PasswordRepeat) %> <%= Html.PasswordFor(x => x.PasswordRepeat) %> </p> <input type="submit" value="Register" /> </fieldset> <% } %>
4 Réponses :
On dirait qu'il y a une surcharge pour textboxfor A> qui vous permet de spécifier des attributs HTML supplémentaires. Ce n'est pas une solution idéale, mais il devrait vous laisser changer l'identifiant (et éventuellement le nom?) Des boîtes de texte rendu. Bien sûr, la modification du nom viserait probablement les choses lorsque vous essayez de poster le formulaire. P>
Tout d'abord, vous pouvez utiliser Vérifiez celui-ci. Quelqu'un a écrit tout un groupe de surcharges prenant en charge les préfixes de réglage. Textboxfor Rendu à HTML avec préfixe sur l'attribut ID a> p>
Si cela manque, vous pouvez voir le motif comment les étendre avec des autres dont vous pourriez avoir besoin. P> html.textbox ("nom de formulaire d'entrée", ...) code> et définir le nom sur ce que vous souhaitez. Il y a une question plus importante comment fourniriez-vous un préfixe sur
html.renderpartiale () code> niveau? Vous fournissez déjà une instance de modèle. Donc, sans changer leurs modèles de vue, il n'y a qu'une possibilité de plus: écrire vos propres surcharges pour
renderpartiale () code> qui prendrait le préfixe et le transmettre à d'autres. P>
Vous n'avez pas besoin d'écrire votre propre surcharge pour RenderPartial, il y a déjà une surcharge qui vous permet de redéfinir la collection ViewData. Vous pouvez simplement ajouter votre préfixe là-bas et avoir votre modèle le chercher. Voir: msdn.microsoft.com/en-us/library/ddd470827.aspx < / a>
au lieu d'utiliser donc dans votre vue principale: p> html.renderpartial code> Vous pouvez utiliser Modèles de l'éditeur qui manipulera les préfixes.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Ns.Models.RegisterModel>" %>
<% using (Html.BeginForm("Register", "Member")) { %>
<fieldset>
<legend>Register</legend>
<p>
<%= Html.LabelFor(x => x.Nickname) %>
<%= Html.TextBoxFor(x => x.Nickname) %>
</p>
<p>
<%= Html.LabelFor(x => x.Email) %>
<%= Html.TextBoxFor(x => x.Email) %>
</p>
<p>
<%= Html.LabelFor(x => x.Password) %>
<%= Html.PasswordFor(x => x.Password) %>
</p>
<p>
<%= Html.LabelFor(x => x.PasswordRepeat) %>
<%= Html.PasswordFor(x => x.PasswordRepeat) %>
</p>
<input type="submit" value="Register" />
</fieldset>
<% } %>
Si vous ne pouvez pas faire une plaque d'éditeurs pour une raison quelconque, vous pouvez le faire à votre vue: lo et voici, toutes les entrées de votre partialView seront préfixées. P > Kudos à R0Manarmy pour le pointant de la sorte. P> P>
et comme une doublure: HTML.RenderPartial ("MyPartialViewName", MyPartialViewModel, Nouvelle vie ViewdAndiction () {TEMPARTINFO = Nouveau TEMPLATEINFO () {HTMLFIELDPREFIX = "MYPREFIXHERE"}})
Si j'utilise la rendu et que cette action renvoie à son tour partielview, ni partielview ni rendu d'une surcharge de vie que je peux voir. J'espérais que ce serait une surcharge sur retour partielview ( code>. Toute suggestion?
NM, découvert, je peux la définir de l'intérieur de l'intérieur, donc je le transmet au point de vue de la vue: @ {viewdata.templateinfo.htmlfieldprefix = Model.Id; } code> Stackoverflow.com/a/6617869/84206