2010-12-01 16 views
0

私はHtml.EditorFor()ヘルパーを使用してモデルにデータをバインドして送信しようとしますが、コントローラに来るモデルはnullです。ここでASP.NET MVC3 Html.EditorFor()の問題

は、モデルのコードです:

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; } 
} 

これは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" /> 
} 

とhtmlコードは次のように生成される:

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

それはHTML-にエラーのように思えますid = "someid" value = "somevalue"でなければなりません。id = "someid_someid" value = "somevalue.somevalue"

+1

をあなた自身のエディタのテンプレートを作成しましたか?もしそうなら、あなたはそのコードを投稿できますか? – GvS

+0

'[DataType(DataType.Password)]'と 'EditorFor'は私にとってうまくいっています。私のidとnameの属性は、私が期待したような「パスワード」だけでした。 – RichC

答えて

0

ありがとうございます!

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

私はこのようにそれを解決する:

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

それは良い解決策であるはい、それはエディタテンプレートの問題でしたか?

+1

@Html.TextBoxFor(m => m)
」が有効です。 – Buildstarted

+0

はい、うまくいきます!ありがとう!私のソリューションとあなたの違いを私に説明できますか? – Boo

+0

なぜ簡単な文字列フィールドのエディタテンプレートが必要ですか? なぜ、LocalizedRequiredとLocalizedDisplayNameをRequiredとDisplayNameの代わりに使用する必要があると思いますか? – Blaise

5

あなたはちょうどあなたが常に次の

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

を使用することができますテキストボックスを使用しているので、それ以外の場合は、あなたが作成したカスタムテンプレートに依存する場合があります。

2

こんにちはあなたはちょうどこのよう@typeディレクティブを置くことによって、それを解決することができます:

@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" /> 
}