根据WebMethod中提供的条件从WebMethod返回一个值

本文关键字:WebMethod 一个 返回 条件 根据 | 更新日期: 2023-09-27 18:13:15

我有一个jQuery Ajax WebMethod调用,如下所示:

<script type="text/javascript">
    $(document).ready(function () {
        $("#btnsubmit").click(function () {
            var arr = new Array();
            arr.push($("#control1").val()); arr.push($("#control2").val()); arr.push($("#control13 option:selected").val()); arr.push($("#control4 option:selected").val()); arr.push($("#control15 option:selected").val());
            var requestedData = JSON.stringify(arr);
            requestedData = "{'details':'" + requestedData + "'}";
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "EmployeeDemotion.aspx/Save",
                data: requestedData,
                dataType: "json",
                success: function (result) {
                  //check the value returned from the WebMethod and provide alerts accordingly
                },
                error: function (result) {
                    alert("Error");
                }
            });
        });
    });
</script>

, WebMethod如下:

 [WebMethod(EnableSession = true)]
     public static InsertDetails[] Save(string details)
        {
            DataTable dt = new DataTable(); DataTable dts = new DataTable();
            List<InsertDetails> data = new List<InsertDetails>();
            JavaScriptSerializer js = new JavaScriptSerializer();
            string[] Tags = js.Deserialize<string[]>(details);
            object[] obj = new object[8];
            obj[0] = Tags[0].ToString(); obj[1] = Tags[1].ToString(); obj[2] = Tags[2].ToString(); obj[3] = Tags[3].ToString();
            obj[4] = Tags[4].ToString(); 

            int a = //say condition 1
            int b = //say condition 2
            if (a< b)
            {
             //insert into database and set a value which says the insertion has succeeded
            }
            else
            {
                //alert that data cannot be inserted
            }
            return data.ToArray();
        }

现在我需要任何可能类型的值(布尔值,数组,字符串,整数或其他)返回给ajax方法,以便ajax方法中的成功函数警告插入状态(如代码片段中所述);应该将一个值与最后一条语句"return data.ToArray();"一起返回给ajax方法。我不要求返回元素'data',验证插入的值应该与'data'一起返回或以任何其他形式返回。

根据WebMethod中提供的条件从WebMethod返回一个值

不确定你想要什么。您是否希望将数据和标志都返回给客户端函数,或者只是将标志返回给客户端函数

  • 情况1:您想要的只是返回关于在save内部发生的操作的消息

    就像这样改变你的保存方法

    [WebMethod(EnableSession = true)]
    public static string Save(string details)
    {
          string message =string.Empty;
          /// rest of the usual code of yours   
          ///
          if (a< b)
          {
             //rest of the code
             message = "Insertion Successful";
          }
          else
          {
             //rest of the code
             message = "Error Occured";
          }
    }
    

    和在您的客户端ajax success里面,简单这样做:

    success: function (result) {
                   alert(result.d);
    }
    
  • 情况2:如果插入成功,您也想发送数据

    创建一个包装器,并将数据和标志都附加到其中。序列化它然后将其发送到客户端函数。即

    //wrapper class
    public class ServiceResponse
    {
       public bool IsSuccess {get;set;}
       public string Message {get;set;}
    }
    

    现在在你的save里面做这个:

    [WebMethod(EnableSession = true)]
    public static string Save(string details)
    {
          ServiceResponse serviceResponse =new ServiceResponse();
          /// rest of the usual code of yours   
          ///
          if (a< b)
          {
             //rest of the code
              serviceResponse.IsSuccess= true;
              serviceResponse.Message = String.Join(",",data.ToArray());
          }
          else
          {
             //rest of the code
             serviceResponse.IsSuccess = false;
          }
        return new JavaScriptSerializer().Serialize(serviceResponse);
    }
    

    并在客户端方法中使用它,如:

      success: function (result) {
              var jsonData = $.parseJSON(result.d);
              if(jsonData.IsSuccess){
                  alert('success');
                  grid.data(jsonData.Message);
              }
              else{
                  alert('failure');
              } 
      }