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

要在更改事件上触发事件,请使用 blur event 。

$("#forgotPassUserName").blur(

这将正确触发更改事件

于 2012-05-24T10:33:13.737 回答