2

ログイン時にログイン ダイアログ ボックスが表示されるのに苦労しています。私が行う必要があるのは、組み込みの MVC3 認証コントロールを使用してユーザーがログインしたときに、いくつかの条件と契約を吐き出し、「同意すると、上記に同意する」というダイアログをポップアップする必要があることです。私は現在それを持っていますが、キャンセルを押すと、サイトはとにかくログインします. これが私のコードです:

<fieldset>
    <legend>Login</legend>

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

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

        <p>
            <input type="submit" value="Login" name="btnLogin" id="btnLogin" />
        </p>
        @Html.ValidationSummary(true)


</fieldset>

そして私が持っているJavascript:

    <script type="text/javascript">
        $(function () {
            $("#btnLogin").click(function () {
                var answer = confirm("Unauthorized access or use of the web content is prohibited.\n" + "By clicking 'OK', you have agreed to the above conditions");
                if (answer) {
                }
                else {
                    $(this).dialog("close");
                }
            });
        });
    </script>

ユーザーがダイアログでキャンセルを押したときにログイン時に HttpPost をキャンセルし、OK を押した場合にログインを続行するにはどうすればよいですか?

とても有難い!!

4

2 に答える 2

3

イベントハンドラーにこれを追加します

 $("#btnLogin").click(function (event) {
     var answer = confirm("Unauthorized access or use of the web content is prohibited.\n" + "By clicking 'OK', you have agreed to the above conditions");
     if (answer) {

     }
     else{
          $(this).dialog("close");
          event.preventDefault();
     }
 });

event.preventDefault();フォームのデフォルトの動作を確実に防ぐために追加する

于 2012-05-23T14:15:12.867 に答える
1

これがサーバー側とクライアント側で検証されていることを確認するには、この手法を使用すると完璧に機能します。JavaScript のみに依存している場合でも、誰かがそれを回避することでログインできます。

モデルにbool呼び出される新しいプロパティを追加しますAcceptTerms

[Display(Name = "Accept Terms and Conditions")]
[IsTrue]
public bool AcceptTerms { get; set; }

あなたの見解では

@Html.LabelFor(model => model.AcceptTerms) </br>
@Html.CheckBoxFor(model => model.AcceptTerms) </br>
@Html.ValidationFor(model => model.AcceptTerms)

チェックされていることを確認できるように、新しい属性を作成します

public class IsTrueAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (value == null) return false;
        if (value.GetType() != typeof(bool)) throw new InvalidOperationException("can only be used on boolean properties.");

        return (bool) value == true;
    }
}
于 2012-05-23T14:15:32.280 に答える