使用ajax检查为空数据返回的数据

时间:2016-12-30 15:15:41

标签: c# jquery asp.net-mvc-4

我正在使用下面的jQuery代码来搜索员工 员工存在,表中的其他字段将被返回。

如果找不到员工,我希望能够向用户发送提醒。 我怎样才能做到这一点?

$(document).on("click", "#btnEmpNumber", function () {
    var getdata = $('#EmpNumber').val();
    var url = "@Url.Action("GetEmployeeInformation", "Home")";

    $.post(url, { 'objdata': getdata }, function (data) {
        if (data == undefined) {
            alert("Invalid Employee");
        }

        $('#mainYourinformation').html(data);
    });
});
public ActionResult GetEmployeeInformation(string objdata)
{
    Customerproductdto objGetEmpData = null;
    try
    {
        objGetEmpData = _DataService.SearchEmplByNumber(objdata);
    }
    catch (Exception ex)
    {
        logger.Error(ex);
    }

    return PartialView("_Empinformation", objGetEmpData);
}

public class Customerproductdto
{
    public string EmployeeNumber { get; set; }
    public string EmployeeName { get; set; }
    public string EmployeePhone { get; set; }
    public string EmployeeTitle { get; set; }        
}

2 个答案:

答案 0 :(得分:2)

假设您找不到员工时SearchEmplByNumber返回null,您可以从操作方法中返回不同的结果。

public ActionResult GetEmployeeInformation(string objdata)
{
    Customerproductdto objGetEmpData = null;
    try
    {
        objGetEmpData = _DataService.SearchEmplByNumber(objdata);
    }
    catch (Exception ex)
    {
        logger.Error(ex);
    }
    if(objGetEmpData!=null)
       return PartialView("_Empinformation", objGetEmpData);

    return Content("No information found for the employee");
}

如果你想要花哨的html标记而不是简单的消息,用这些花哨的标记创建一个新的局部视图并返回它。

    if(objGetEmpData!=null)
       return PartialView("_Empinformation", objGetEmpData);

    return PartialView("NoDataFoundForEmployee");

假设您在NoDataFoundForEmployee.cshtml~/Views/Shared

中有一个名为~/Views/Home/的视图

您的$.post成功回调中不需要if条件,因为您的操作方法将始终返回一些响应。

编辑:根据评论

  

我正在使用toastr来返回消息,这就是我想要坚持的内容

在这种情况下,您可以始终使用以下结构从方法返回json响应

{ 
  status="found",
  message="some Message for the user",
  resultMarkup="somehtmlToDisplayToUser"
}

您可以使用以下帮助方法(took from this answer)将您的查看结果转换为字符串

public string RenderRazorViewToString(string viewName, object model)
{
  ViewData.Model = model;
  using (var sw = new StringWriter())
  {
    var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,
                                                             viewName);
    var viewContext = new ViewContext(ControllerContext, viewResult.View,
                                 ViewData, TempData, sw);
    viewResult.View.Render(viewContext, sw);
    viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
    return sw.GetStringBuilder().ToString();
  }
}

现在在你的行动方法中,

public ActionResult GetEmployeeInformation(string objdata)
{
    Customerproductdto objGetEmpData = null;
    try
    {
        objGetEmpData = _DataService.SearchEmplByNumber(objdata);
    }
    catch (Exception ex)
    {
        logger.Error(ex);
         return Json(new { status="error", message="System Error!" });
    }
    if(objGetEmpData!=null)
    {
        var h= RenderRazorViewToString("_Empinformation", objGetEmpData);
        return Json(new { status="found", resultMarkup = h });
    }
    return Json(new { status="notfound", message="Employee not found" });
}

现在在$ .post方法的回调中,检查json响应的status属性值并显示标记或消息。

$.post(url, { 'objdata': getdata }, function (data) {
    if (data.status==="found") {
        $('#mainYourinformation').html(data.resultMarkup);
    }
    else
    {
       alert(data.message);
       // or call the toastr method here
      // toastr.error(data.message, 'Not found')
    }

});

答案 1 :(得分:1)

从控制器返回异常并在catch $.post方法块中捕获该异常,并向用户显示警告。

   $.post(url, { 'objdata.....).catch (function (ex){ 
         alert (ex);   
     });