我正在尝试远程检查控制器是否阻止某个成员查看。触发此检查的表单不会强烈绑定到模型。控制器方法是触发器,但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);
}
我需要帮助
答案 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);
}