MVC View中的Json远程验证功能

时间:2015-12-07 22:44:02

标签: json asp.net-mvc

我正在尝试远程检查控制器是否阻止某个成员查看。触发此检查的表单不会强烈绑定到模型。控制器方法是触发器,但MemberID作为null

到达控制器
function BlockedMember() {
    var isExist = false;
    var m_userid = {
        act: 'isBlocked',
        MemberID: $('#txtMemberID').val()
     };
    $.ajax({
        url: '/member-blocked', 
        type: 'POST',
        async: false,
       data: { 'act': 'isBlocked', 'MemberID': $('#txtMemberID').val() },
        dataType: 'json',
        success: function (result) {
            if (result == 0) {
                isExist = false;
                //return true;
            }
            else if (result == 1) {
                //alert("Invalid");
                isExist = true;
                //return false;
            }
        },
        error: function (xhr) {
            $('#modalMessage').modal('show');
            $('#modalMessage').find('#modalBody').html(xhr.responseText);
        }
    });
    return isExist;
}

以下是控制器操作

[Route("member-blocked/{act?}/{MemberID?}/", Name = "getmemberstatus")]
    public ActionResult GetBlockedMember(string act, int? MemberID)
    {
        string mid="";
        mid = Request["act"];
        var isBlocked = db.Members.Where(a => a.Mcode == MemberID && a.MemberOk == false)
       .Select(c => new { c.MemberId, c.FullName });
        return Json(isBlocked, JsonRequestBehavior.AllowGet);
    }

我需要帮助

1 个答案:

答案 0 :(得分:0)

正如Stephen Muecke在评论中提到的,即使在你从ajax得到你的回复之前,你的函数也会返回一个布尔值。记住ajax是异步的。

此外,您的操作方法看起来像是一个GET操作方法,并且从您的javascript代码中,您正在尝试使用请求正文中的某些数据进行POST调用。你不需要这样做。您只需使用$ .get。

执行get请求即可
function CheckBlockedMember() {

    var url = "/member-blocked/isBlocked/"+$('#txtMemberID').val();

    $.get(url, function (result) {
       // We got some response from the server action method now.

        console.log(result);
        // show some message to user based on the result
        // Read further down to see the response data type

        if (result) {

            alert("User is blocked");
            //Or hide or show some message to user
           // Ex :$("#SomeMsgDiv").html("User is blocked")

        } else {

            alert("User is not blocked");
            //Hide or show some message to user
           // Ex :$("#SomeMsgDiv").html("User is not blocked")

        }
    });

}

现在,您可以从代码中的其他位置调用此CheckBlockedMember方法。敌人的例子

$(function(){
  $(document).on("change","$txtMemberID",function(e){
     CheckBlockedMember();
  });
});

另外需要注意的是,在action方法中,从action方法返回的数据是这样的数组。 (因为你只是在你的where子句返回的结果上调用select。)

[{
    "MemberId": 123,
    "FullName": "Scott"
}]

如果您的where子句返回多个记录,则结果将在数组中包含多个项目。由于您只想知道用户是否被阻止,您可以简单地返回一个布尔值作为响应。

public ActionResult GetBlockedMember(string act, int? MemberID)
{
   //isBlocked will have true of false based on the where clause execution
    bool isBlocked = db.Members
           .Any(a => a.Mcode == MemberID && a.MemberOk == false);

    return Json(isBlocked, JsonRequestBehavior.AllowGet);
}