そのため、ユーザーが忘れたパスワードを取得できるようにする多段階プロセスがあります。ステップは次のようになり、コントローラーのステップごとに異なるアクションがあります。
- ユーザー名とメールアドレスを入力
- パスワードの質問の答えを入力してください
- すべてがうまくいった場合、ユーザーに回復リンクを電子メールで送信します
すべてに1つのモデルを使用してみました:
public class AccountForgotPassword
{
[Required()]
[DisplayName("Username")]
public string UserName { get; set; }
[Required()]
public string Email { get; set; }
[Required()]
public string PasswordAnswer { get; set; }
}
しかし、最初のアクションで ModelState.IsValid をチェックすると、ユーザーはパスワードの回答の質問をまだ入力できないため、常に false になり、モデルの状態が実際には有効であるが欠落しているだけであることを確認するための興味深いコードが作成されます。ユーザーがまだ誰なのかわからないので、パスワードの答え。
これを回避するために、型付きモデルをやめて、アクションで文字列パラメーターのみを使用することにしました。唯一の問題は、モデル バインディングで得られる簡単な検証ワイヤアップを使用できなくなったことです。
そうは言っても、jQuery検証を個々の入力に手動で結び付けて、必要なルールをチェックする簡単な方法を知っている人はいますか? また、この接続により、バリデーターが生成するデフォルトのエラー メッセージを使用できるようになりますか?それとも、それらを接続する際に独自のエラー メッセージを提供する必要がありますか? 私の見解では、これは簡単でしょうか?
@{
ViewBag.Title = "Forgot Password";
}
<h2>
Forgot Password</h2>
@using (Html.BeginForm())
{
<p>
@Html.Label("UserName", "Username")
@Html.TextBox("UserName")
@Html.ValidationMessage("UserName")
</p>
<p>
@Html.Label("Email", "Email")
@Html.TextBox("Email")
@Html.ValidationMessage("Email")
</p>
<p>
<input type="submit" value="Send Form" />
</p>
}
<script type="text/javascript">
$.validator.unobtrusive.addRule(..something here...);
</script>
また、これを行うためのより良い方法があれば、私に知らせてください。
アップデート
これを見つけた他の人のために、ルールを手動で追加する方法を見つけました。最初に検証ドキュメントを読むべきでした。上記のビュー html を想定すると、スクリプトは次のようになります。
<script type="text/javascript">
$(function () {
$('#UserName').rules('add', {
required: true,
messages: {
required: 'The username field is required.'
}
});
$('#Email').rules('add', {
required: true,
messages: {
required: 'The email field is required.'
}
});
$.validator.unobtrusive.parse('form');
});
</script>
しかし、もう少し考えてAFinkelsteinの答えを考慮に入れた後、私は先に進んで2つの異なるビューモデルを作成し、フレームワークに仕事をさせようと思います。