使用Javascript:
$(function () {
$("#btEmail").click(function () {
var name = $("#username").val();
$.post("@Url.Action("SearchUserByUsername", "LogonWorkFlow")", { username: name }, function (result) {
var r = result;
});
});
});
Controller MVC:
[HttpPost]
public ActionResult SearchUserByUsername(string username)
{
return Json(GetUserByEmail(username), JsonRequestBehavior.AllowGet);
}
public async Task<JsonResult> GetUserByEmail(string email)
{
var u = await userManager.FindByEmailAsync(email);
var user = new { mail = u.Email, n = u.FullName };
return Json(user, JsonRequestBehavior.AllowGet);
}
请求通常按函数传递,但返回始终为空
答案 0 :(得分:2)
您没有重新调整字符串,而是返回任务。哪个JSON序列化程序不知道如何处理,哪些没有有意义的字符串表示返回给客户端。 SearchUserByUsername
也应为async
。类似的东西:
public async Task<ActionResult> SearchUserByUsername(string username)
{
return Json(await GetUserByEmail(username), JsonRequestBehavior.AllowGet);
}
这样它就可以等待对GetUserByEmail
的调用,async
。
虽然GetUserByEmail
已经返回JsonResult
,但您可以(也可能应该)简化:
public async Task<ActionResult> SearchUserByUsername(string username)
{
return await GetUserByEmail(username);
}
当然,在这一点上,它首先引出了为什么你真的需要SearchUserByUsername
操作的问题,因为它只是对现有操作的传递。