【问题标题】:Json Ajax Parameter pass & Webmethod not firingJson Ajax 参数传递和 Web 方法未触发
【发布时间】:2014-04-02 18:01:15
【问题描述】:

在我的 Ajax 函数中,我尝试将一个 int 参数传递给 Web 方法,但没有成功。 我在这里粘贴我的代码

Ajax 函数

    $('#drpChurchNames').on('change', function () {
        //alert($(this).val());
        LoadFathersToChurch(churchId)
    });

    function LoadFathersToChurch(churchId) {

        var url = '<%=ResolveUrl("WebMethods.aspx/GetFatherNames") %>';
        $.ajax({
            url: url,
            type: "GET",
            dataType: "json",
            data:'{ Id: " '+churchId +' "}',
            contentType: "application/json; charset=utf-8",
            success: function (Result) {
                $.each(Result.d, function (key, value) {
                    $("#drprevfather").append($("<option></option>").val
                    (value.Id).html(value.FatherName));
                });
            },
            error: function (e, x) {
                alert(x.ResponseText);
            }
        });

    }

这是我的网络方法

      [WebMethod]
 [ScriptMethod(UseHttpGet = true)]
 public static List<FatherNames> GetFatherNames(int ChurchId)
 {
     List<FatherNames> FathersList = new List<FatherNames>();
     try
     {
         SqlCommand comChurchNames = new SqlCommand("GetFathers", conDB);
         comChurchNames.CommandType = CommandType.StoredProcedure;
         comChurchNames.Parameters.Add("@Id", SqlDbType.Int);
        comChurchNames.Parameters["@Id"].Value = ChurchId;
        if (conDB.State == ConnectionState.Closed)
            conDB.Open();

        SqlDataReader rdr = comChurchNames.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(rdr);
        foreach (DataRow r in dt.Rows)
        {
            FathersList.Add(new FatherNames
            {
                Id = (int)r["Id"],
                FatherName = r["FatherName"].ToString()

            });
        }
    }

这是我的 SP

ALTER PROCEDURE [dbo].[GetFathers]
@SelectIndexName int
AS
BEGIN
Select * from dbo.RevFathers
Where ChurchId = @SelectIndexName
END

【问题讨论】:

    标签: c# jquery asp.net ajax json


    【解决方案1】:

    您将Id 作为参数传递,正确的是ChurchId,就像webmethod 签名GetFatherNames(int ChurchId)

    有正确的方法:

    $.ajax({
            url: url,
            type: "GET",
            dataType: "json",
            data:'{ ChurchId: " '+churchId +' "}',
            contentType: "application/json; charset=utf-8",
            success: function (Result) {
                $.each(Result.d, function (key, value) {
                    $("#drprevfather").append($("<option></option>").val
                    (value.Id).html(value.FatherName));
                });
            },
            error: function (e, x) {
                alert(x.ResponseText);
            }
        });
    

    【讨论】:

      【解决方案2】:

      你的 webmethod 真的被执行了吗?如果是,并且您认为它应该返回数据,则可能是您的 webmethod 没有返回 JSON,因此 jQuery 可能正在生成并出错并且没有触发成功。

      我的 global.asax 中有这个来配置 XML 和 JSON 的输出:

      using System.Net.Http.Formatting;
      using System.Net.Http.Headers;
      using System.Web.Http;
      

      放在app_start中

      GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("type", "json", new MediaTypeHeaderValue("application/json")));
      GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(new QueryStringMapping("type", "xml", new MediaTypeHeaderValue("application/xml")));
      

      我知道这不是一个直接的答案,但我还不能发布 cmets,所以我只想先问一下上面的问题,关于 webmthod 是否被调用。

      【讨论】:

        猜你喜欢
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-27
        相关资源
        最近更新 更多