2017-02-15 2 views
0

Javascript:Ajax электронной Asp.net MVC возвращение "результат неопределен"

$(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); 
     } 

Запрос обычно проходит по функции, но возвращение всегда пустой

ответ

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 операции в первую очередь, поскольку это просто переход к существующей операции.