在 ASP.NET C# 中使用 jQuery 将多个参数传递给 Web 方法

Posted

技术标签:

【中文标题】在 ASP.NET C# 中使用 jQuery 将多个参数传递给 Web 方法【英文标题】:Passing Multiple parameters to Web Method using jQuery in ASP.NET C# 【发布时间】:2021-01-13 21:55:43 【问题描述】:

我使用 WebMethod(服务)绑定下拉菜单 我有多个下拉列表,需要相互绑定,就像下拉列表的级联一样,但是在为一个选定的值传递值时,在我的网络方法上调试时它显示为 null

网络方法:

 public static List<Company> GetCompanies(string CountryCode, string CompanyCode)
        
            GetInitiatorList.MasterDataServiceClient oClient = new GetInitiatorList.MasterDataServiceClient();
            Almarai.GiveAway.GetInitiatorList.ALM_COMPANY_M[] initiatorsList = oClient.GetActiveCompanies(CountryCode, CompanyCode)                                                                                 List<Company> Companyes = new List<Company>();
            foreach (Almarai.GiveAway.GetInitiatorList.ALM_COMPANY_M company in initiatorsList)
            
                Companyes.Add(new Company()
                
                    CountryCode = company.CompanyCode,
                    CompanyName = company.CompanyName
                );
            
            return Companyes;
        

jQuery

 $('#ddlCountry').change(function (e) 

   var selectedCountry = $('#ddlCountry').val();
   $.ajax(
            type: "POST",
            url: "Header.aspx/GetCompanies",
            data: JSON.stringify( CountryCode: selectedCountry, CompanyCode: 'SAU' ),
            dataType: "json",
            contentType: "application/json",
            success: function (res) 
            $.each(res.d, function (data, value) 
            $("#ddlCompany").append($("<option></option>").val(value.CompanyId).html(value.CompanyName));

            $('#ddlCompany').change(function (e) 

aspx:

 <div class="col-md-8">
       <select id="ddlCountry">
          <option value="0">--Select Country--</option>
       </select>
 </div> 

我在哪里做错了请指导我

【问题讨论】:

在网络浏览器中,使用 F12 工具和网络选项卡来确定 ajax 发布的内容。 【参考方案1】:

从下拉列表中获取当前选择的值:

$('#ddlCountry').val();

从下拉列表中获取当前选定的文本:

$('#ddlCountry :selected').text();

您可以通过在 ajax 调用中指定这样的方式发送硬编码文本,首先检查您的 ajax 调用是否正常工作:

$.ajax(
    type: "POST",
    url: "Header.aspx/GetCompanies",
    data: JSON.stringify( CountryCode: 'USA', CompanyCode: 'SAU' )
    ....

然后您可以检查您是否正确分配了下拉值?如果你只想要文本而不是价值,那么你可以使用我在上面提到的。我认为它会解决你的问题。如果不是,请告诉我。

============ 更新(阅读 cmets 后)======================

我根据您的示例创建了一个示例演示。由于我没有您所拥有的服务代码,因此对其进行测试以检查它是否正常工作非常简单,否则它会给我带来与您一样的错误。

我所做的测试对您来说可能看起来微不足道,但请检查一下,它对我有用并给我正确的结果。这是 Route Config 文件的屏幕截图,看一下红色圆圈(我必须更改它以使 web 方法工作)

chrome 开发工具的屏幕截图(为简单起见,此处用于 Contact.aspx 页面)

最后是 Contact.aspx -> GetCompanies web 方法断点点击屏幕截图,为了简单起见,我在这里修改了方法主体,只是为了检查数据绑定是否工作。

所以,这对我有用。请您一一检查您的所有步骤并告诉我。如果它对你有帮助,那将是我的荣幸。

【讨论】:

硬编码值有效,但 $('#ddlCountry').val();不工作 我正在使用服务绑定这些下拉列表 那你会在调试器中检查你的服务值,这些是否可以? 我检查了它的到来,即使我已经成功绑定了第一个下拉列表我想要那些已经从第一个下拉列表中绑定的值 @user14304386 我已经重新编辑了我的答案,请检查并告诉我。【参考方案2】:

我认为您不需要对其进行字符串化。

代替:

data: JSON.stringify( CountryCode: selectedCountry, CompanyCode: 'SAU' ),

尝试:

data:  CountryCode: selectedCountry, CompanyCode: 'SAU' ,

【讨论】:

已添加但未触发网络方法【参考方案3】:

非常愚蠢的一点,我在这里错过了从网络方法我返回CompanyCode,如您所见

CountryCode = company.CompanyCode, 公司名称 = 公司.公司名称

在 Html 中,我试图绑定 CompanyId,如您在此处看到的:

$("#ddlCompany").append($("<option></option>").val(value.CompanyId).html(value.CompanyName));

所以对于明显的区域,它是 null 或 0。

我只需将value.CompanyId 替换为CompanyCode,它现在可以正常工作了

【讨论】:

【参考方案4】:

你需要.aspx后缀吗?

Try like this url: "Header/GetCompanies", 

【讨论】:

以上是关于在 ASP.NET C# 中使用 jQuery 将多个参数传递给 Web 方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 asp.net C# 和 jquery 过滤数据集合

使用 Jquery Ajax 将数组传递给 asp.net C# 控制器

如何使用 JQuery c# 在嵌套网格视图 ASP.net 中使用日期时间选择器

jquery datepicker和asp.net c#空值

Jquery 不能在使用 ASP.NET C# 的母版页中工作,并且在不使用母版页的情况下工作正常

如何在 c# ASP.Net 中使用有效的 JSON 输出创建 JSON WebService 并使用 JQuery/Ajax 进行查询