C# 使用ajax时检查返回的数据是否为空数据

C# 使用ajax时检查返回的数据是否为空数据,c#,jquery,asp.net-mvc-4,C#,Jquery,Asp.net Mvc 4,我正在使用下面的jQuery代码搜索员工,一旦 如果存在employee,则返回表中的其他字段 如果找不到员工,我希望能够向用户发送警报。 我怎样才能做到这一点 $(document).on("click", "#btnEmpNumber", function () { var getdata = $('#EmpNumber').val(); var url = "@Url.Action("GetEmployeeInformation", "Home")"; $.pos

我正在使用下面的jQuery代码搜索员工,一旦 如果存在employee,则返回表中的其他字段

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

$(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(字符串objdata)
{
Customerproductdto objGetEmpData=null;
尝试
{
objGetEmpData=\u DataService.SearchEmplByNumber(objdata);
}
捕获(例外情况除外)
{
记录器错误(ex);
}
返回PartialView(“\empu information”,objGetEmpData);
}
公共类Customerproductdto
{
公共字符串EmployeeNumber{get;set;}
公共字符串EmployeeName{get;set;}
公共字符串EmployeePhone{get;set;}
公共字符串EmployeeTitle{get;set;}
}

从控制器返回异常,并在
$的
catch
块中捕获该异常。发布
方法并向用户显示警报

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

从控制器返回异常,并在
$的
catch
块中捕获该异常。发布
方法并向用户显示警报

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

假设未找到员工时,您的
SearchEmplByNumber
return
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");
假设您在
~/Views/Shared
~/Views/Home/

您的
$中不需要if条件。因为您的操作方法总是会返回一些响应,所以在
成功回调后发布

根据评论编辑:


我用toastr来回复信息,这就是我想要坚持的

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

{ 
  status="found",
  message="some Message for the user",
  resultMarkup="somehtmlToDisplayToUser"
}
可以使用下面的helper方法()将视图结果转换为字符串

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')
    }

});

假设未找到员工时,您的
SearchEmplByNumber
return
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");
假设您在
~/Views/Shared
~/Views/Home/

您的
$中不需要if条件。因为您的操作方法总是会返回一些响应,所以在
成功回调后发布

根据评论编辑:


我用toastr来回复信息,这就是我想要坚持的

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

{ 
  status="found",
  message="some Message for the user",
  resultMarkup="somehtmlToDisplayToUser"
}
可以使用下面的helper方法()将视图结果转换为字符串

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')
    }

});

我用toastr来回复信息,这就是我想要坚持的。谢谢,我真的不想再创建一个局部视图。我希望主窗体仍在页面上,并且警报显示“未找到任何信息”。我正在使用toastr返回消息,这正是我想要坚持的。谢谢,我真的不想再创建一个局部视图。我希望主窗体仍在页面上,并且警报显示“未找到任何信息”