2016-04-04 21 views
0

シナリオ:管理者によって新しいユーザーを作成するビューを追加しようとしています。アプリはフォーム認証です。ログインしているユーザー(管理者)がいます。パスワードForがビューに追加されると、ビューはログインしたユーザーにフィールドを自動的に入力します。 asp.net-mvc:ビューにpasswordForを追加すると、自分のフィールドに自動的に値が設定されます。

コントローラコード:

public ActionResult Create() 
{ 
    var userViewModel = new UserViewModel(); 
    return View(userViewModel); 
} 

ビューコード:

@model MVC4.Models.UserViewModel 

@{ 
    ViewBag.Title = "Create"; 
} 

@using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>UserVireModelcs</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.UserName) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.UserName) 
     @Html.ValidationMessageFor(model => model.UserName) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Password) 
    </div> 
    <div class="editor-field"> 
     @Html.PasswordFor(model => model.Password) 
     @Html.ValidationMessageFor(model => model.Password) 
    </div> 

    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 
+0

モデルをビューに送信しない場合はどうなりますか?とにかく空のモデルを送るのは奇妙なことです。 – David

+0

はい、それは私が空のものを送信しようとした理由ですが、それはエーテル的に起こります。 – petric

+0

ログインフォームをあらかじめ入力するブラウザではないのですか? 「ユーザー名」と「パスワード」フィールドは、ブラウザによってログインプロンプトとして解釈される可能性があります。 – David

答えて

1

容疑者、ここで起こってアプリケーションが事前に充填されていないことをフィールドになっているが、 ブラウザです。これは、このフォームがと正確にのログインプロンプトのように見えるためです。 (このサイトでログインプロンプトを自動入力しないようにブラウザ自体から情報を消去することでこれをテストすることができます)。

ログインの概念を意味的に分離してユーザー。基本的に...フィールドの名前を変更します。いくつかのより具体的な名前を持つ単純なビューモデルが役立つだろう:

<div class="editor-label"> 
    @Html.LabelFor(model => model. NewUserUsername) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model. NewUserUsername) 
    @Html.ValidationMessageFor(model => model. NewUserUsername) 
</div> 

<div class="editor-label"> 
    @Html.LabelFor(model => model.NewUserPassword) 
</div> 
<div class="editor-field"> 
    @Html.PasswordFor(model => model.NewUserPassword) 
    @Html.ValidationMessageFor(model => model.NewUserPassword) 
</div> 

それは(私は同意するだろう、もう少し詳細なおそらく1がそれになりたいかもしれないよりです:

public class CreateUserViewModel 
{ 
    public string NewUserUsername { get; set; } 
    public string NewUserPasswords { get; set; } 
} 

を次に、あなたのビューであることを使用この方が明示的なコンテキストを追加すると、こののログインフォームではないことがブラウザに明確になります。あなたのニーズに合った命名法を使用してください。UsernamePasswordよりも説明的にしてください。

関連する問題