1

ユーザー名フィールドがあり、その下にセキュリティの質問のドロップダウン リストがあるシンプルなパスワード リセット フォームがあります。

私が作業しようとしているのは、ユーザーが有効なユーザー名を入力したとき、テキストボックスからフォーカスを外したときに、データベースにあるユーザーのセキュリティの質問がドロップダウン リストに入力されるようにしたいということです。

ここに私のHTMLがあります

    <div class="editor-field">
        @Html.TextBoxFor(model => model.userName, new { @Id = "forgotPassUserName" })
        @Html.ValidationMessageFor(model => model.userName)
    </div>

    <div class="editor-field">
    @{
        List<SelectListItem> securityquestionvalues = new List<SelectListItem>();
    }
        @Html.DropDownListFor(model => model.securityQuestion, securityquestionvalues, new { @Id = "forgotPassSecurityQuestions" })

これが私のjQuery/JSです

<script type="text/javascript">
$(function () {
    $("#forgotPassUserName").change(function () {
        var selectedValue = $(this).val();
        $.getJson("LoginRegisterController/ForgotPasswordDropDownList", { user: selectedValue }, function (result) {
            var selectList = $("#forgotPassSecurityQuestions");
            selectList.add(result, null);

        });
    });
});

上記の getJSON によって呼び出されるコントローラのメソッドは次のとおりです。

        public ActionResult ForgotPasswordDropDownList(string userName)
    {
        var db = IoC.ResolveObjectContextelearningCommon();

        var rep = db.GetRepository<EmployeeReg>();

        List<EmployeeReg> user = rep.Find(o => o.Login == userName).ToList();

        List<SelectListItem> questionList = new List<SelectListItem>();

        if (user[0].secureQuestion1 != null)
        {
            questionList.Add(new SelectListItem { Text = user[0].secureQuestion1, Value = user[0].secureQuestion1 });
        }

        if (user[0].secureQuestion2 != null)
        {
            questionList.Add(new SelectListItem { Text = user[0].secureQuestion2, Value = user[0].secureQuestion2 });
        }

        return Json(questionList, JsonRequestBehavior.AllowGet);
    }

不運にも。これは私にとってはうまくいきません。残念ながら、getJSON メソッドでブレークポイントを設定しようとするとエラーが発生します。問題はそこにあるようです。

編集

getJSON メソッドを .ajax に変更しました

<script type="text/javascript">
$(function () {
    $("#forgotPassUserName").change(function () {
        var selectedValue = $(this).val();
        var url = '<%= Url.Action("ForgotPasswordDropDownList", "LoginRegisterController") %>';
        $.ajax({
            type: "GET",
            url: url,
            data: { userName: selectedValue },
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result) {
                alert("testing");
            }
        });
    });
});

まだ警告ポップアップが表示されません....

4

2 に答える 2

2

次の行は正しくありません。

selectList.add(result, null);

forそれらを選択リストに追加するには、次のようなループが必要です。

selectList.html(""); //empty the options first

for (var i = 0; i < result.length; i++)
{
    selectList.append("<option value='" + result[i].Value  + "'>" 
        + result[i].Text  + "</option>");
}
于 2012-05-23T19:17:40.267 に答える
0

change イベントでイベントを発生させるには、blur イベントを使用します。

$("#forgotPassUserName").blur(

これにより、変更イベントが適切に発生します

于 2012-05-24T10:33:13.737 に答える