2010-12-01 3 views
0

J'essaye de lier des données au modèle avec l'aide de Html.EditorFor() et de soumettre, mais le modèle venu au contrôleur est nul.ASP.NET MVC3 Problème Html.EditorFor()

Voici le code du modèle:

public class LogOnModel 
{ 
    [LocalizedRequired] 
    [LocalizedDisplayName("User Name")] 
    public string UserName { get; set; } 

    [LocalizedRequired] 
    [DataType(DataType.Password)] 
    [LocalizedDisplayName("Password")] 
    public string Password { get; set; } 

    [LocalizedDisplayName("Remember Me")] 
    public bool RememberMe { get; set; } 
} 

c'est cshtml:

@model Models.LogOnModel 
{ 
    View.Title = "Log On"; 
} 
@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(m => m.UserName); 
    @Html.EditorFor(m => m.Password); 
    <input type="submit" value="LogOn" /> 
} 

et le code HTML est générer comme ceci:

<input id="UserName_UserName" name="UserName.UserName" type="text" value="qwerty" /> 
<input id="Password_Password" name="Password.Password" type="password" /> 

il semble que l'erreur dans html- code généré, il doit être id = "someid" value = "somevalue", mais pas id = "someid_someid" value = "somevalue.somevalue"

+1

Avez-vous créé votre propre modèle de l'éditeur? Si oui, pourriez-vous poster ce code? – GvS

+0

'[DataType (DataType.Password)]' avec 'EditorFor' a bien fonctionné pour moi. Mes identifiants et noms étaient juste "Mot de passe" comme je m'y attendais. – RichC

Répondre

0

merci! oui, il était problème dans le modèle de l'éditeur:

<div class="textinput">@Html.TextBox(ViewData.ModelMetadata.PropertyName, Model)</div> 

je résous comme ceci:

<div class="textinput">@Html.TextBox(String.Empty)</div> 

est-il une bonne solution?

+1

'

@Html.TextBoxFor(m => m)
' devrait travailler pour vous. – Buildstarted

+0

oui, ça marche! Merci! Pouvez-vous m'expliquer la différence entre ma solution et la vôtre? – Boo

+0

Pourquoi avez-vous besoin d'un modèle d'éditeur pour un champ de chaîne simple? Et, pourquoi vous sentez-vous nécessaire d'utiliser LocalizedRequired et LocalizedDisplayName au lieu de Required et DisplayName? – Blaise

5

Puisque vous utilisez juste textboxes vous pouvez toujours utiliser les éléments suivants

@using (Html.BeginForm()) { 
    @Html.TextBoxFor(m => m.UserName); 
    @Html.PasswordFor(m => m.Password); 
    <input type="submit" value="LogOn" /> 
} 

Sinon, il peut aussi dépendre de modèles personnalisés que vous avez créés.

2

Salut Vous pouvez le résoudre en mettant simplement la directive @type comme ceci:

@Html.EditorFor(model => model.strPassword, new { htmlAttributes = new { @class = "form-control",@type="password" } }) 
0
@using (Html.BeginForm()) { 
    @Html.TextBoxFor(m => m.UserName); 
    @Html.TextBoxFor(m => m.Password); 
    <input type="submit" value="LogOn" /> 
} 
Questions connexes