2

J'utilise des modèles d'éditeur dans mon code et ce que j'ai remarqué est que beaucoup de contrôles obtiennent la propriété name en fonction de l'index.ASP.NET MVC3 EditorTemplates et les attributs de nom

@Html.EditorFor(x => x.Emails) 

Où Answers est collection d'objets EmailViewModel

Ce qui est rendu est-ce pour chacun article:

<input data-val="true" data-val-number="The field must be a number." 
     data-val-required="The Email field is required." 
     id="Emails_0__EmailId" name="Emails[0].EmailId" value="1"> 

J'ai essayé de définir la propriété du nom comme celui-ci:

@Html.TextBoxFor(x => x.EmailId, new { @name = "EmailAdress" }) 

Mais cela n'a aucun effet!

Que dois-je faire pour que la valeur de nom prenne effet? La principale raison de faire cela est à des fins de validation. Dans mes règles de validation, je donne les résultats suivants:

$("#someForm").validate({ 
     rules: { 
      EmailAddress: { 
       required: true, 
       email: true 
      } 
     } 
    }); 
+0

Est-ce que x.Emails est une liste ou un tableau? Vous ne devez pas utiliser EditorFor() dans une liste d'objets à moins de créer votre propre modèle d'éditeur avec la gestion correcte des objets de la liste. – renanlf

+0

Il les nomme de cette façon afin que le classeur modèle puisse se lier correctement à une collection. Si vous changez cela, vous devrez faire un peu plus de travail pour vous assurer que tout se corrige correctement lorsque vous postez le formulaire. – Dismissile

Répondre

3

Essayez

@Html.EditorFor(x => x.Emails, "string", "EmailAddress") //or EmailAdress 

MSDN reference a ce qui suit, vous êtes intéressé par le htmlFieldName

public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html, 
    Expression<Func<TModel, TValue>> expression, 
    string templateName, 
    string htmlFieldName 
) 

Une chaîne qui est utilisée pour désambiguïser les noms des éléments d'entrée HTML qui sont rendus pour les propriétés ayant le même nom.

Pour modifier le préfixe, vous pouvez le configurer dans votre contrôleur

ViewData.TemplateInfo.HtmlFieldPrefix 

ou dans votre vue

@Html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "Foo" 

Bien sûr, vous pouvez écrire votre propre aide qui fait cela chaque fois que vous l'utilisez.

+0

ajoute toujours ceci: [0] .EmailAddress comme nom – jmogera

+0

réponse mise à jour avec une suggestion de préfixe – dove

+0

Où cela irait-il dans le contrôleur? – jmogera

Questions connexes