Javascript Ajax e Asp.net MVC return“;“结果未定义”;

Javascript Ajax e Asp.net MVC return“;“结果未定义”;,javascript,ajax,asp.net-mvc,Javascript,Ajax,Asp.net Mvc,Javascript: $(function () { $("#btEmail").click(function () { var name = $("#username").val(); $.post("@Url.Action("SearchUserByUsername", "LogonWorkFlow")", { username: name }, function (result) { var r = result;

Javascript:

$(function () {
    $("#btEmail").click(function () {
        var name = $("#username").val();

        $.post("@Url.Action("SearchUserByUsername", "LogonWorkFlow")", { username: name }, function (result) {
            var r = result;

        });
    });
});
控制器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);
        }
[HttpPost]
公共操作结果SearchUserByUsername(字符串用户名)
{
返回Json(GetUserByEmail(用户名),JsonRequestBehavior.AllowGet);
}
公共异步任务GetUserByEmail(字符串电子邮件)
{
var u=await userManager.findbyemailsync(电子邮件);
var user=new{mail=u.Email,n=u.FullName};
返回Json(用户,JsonRequestBehavior.AllowGet);
}

请求通常通过函数传递,但返回值总是空的

您不是在重新调整字符串,而是在返回任务。JSON序列化程序不知道如何处理它,并且没有返回给客户端的有意义的字符串表示
SearchUserByUsername
也应该是
async
。比如:

public async Task<ActionResult> SearchUserByUsername(string username)
{
    return Json(await GetUserByEmail(username), JsonRequestBehavior.AllowGet);
}

当然,在这一点上,它引出了一个问题,为什么您首先真正需要
SearchUserByUsername
操作,因为它只是对现有操作的传递。

您不是在重新调整字符串,而是在返回任务。JSON序列化程序不知道如何处理它,并且没有返回给客户端的有意义的字符串表示
SearchUserByUsername
也应该是
async
。比如:

public async Task<ActionResult> SearchUserByUsername(string username)
{
    return Json(await GetUserByEmail(username), JsonRequestBehavior.AllowGet);
}
当然,在这一点上,它引出了一个问题,即为什么您首先真正需要
SearchUserByUsername
操作,因为它只是对现有操作的传递