.NET应用中WebService调用及动态创建TextBox的实现方法咨询
一、如何在.NET应用中调用WebService?
我平时在项目里常用两种方法来实现,给你详细说说:
方法1:添加服务引用(最直观简便)
这是.NET官方推荐的方式,自动生成代理类,不用自己处理SOAP消息:
- 打开你的.NET项目,右键项目名称 → 选择「添加」→「服务引用」
- 在弹出窗口里输入WebService的WSDL地址(比如
http://xxx/Service.asmx?wsdl),点击「前往」加载服务信息 - 确认服务接口没问题后,设置一个自定义命名空间(比如
MyPhoneService),点击「确定」 - 之后就能在代码里直接实例化服务对象调用方法了,示例代码:
using MyPhoneService; // 刚才设置的命名空间 // 实例化服务客户端 var serviceClient = new PhoneServiceSoapClient(); // 调用WebService的方法,传入参数 var result = serviceClient.GetPhoneInfo("138xxxxxxx"); // 处理返回结果 Console.WriteLine(result);
方法2:手动发送HTTP请求(灵活可控)
如果不想添加服务引用,或者需要自定义请求细节,可以用HttpClient直接发送SOAP请求:
using System.Net.Http; using System.Text; // 构造SOAP格式的请求体 var soapRequest = @"<?xml version=""1.0"" encoding=""utf-8""?> <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""> <soap:Body> <GetPhoneInfo xmlns=""http://tempuri.org/""> <phoneNumber>138xxxxxxx</phoneNumber> </GetPhoneInfo> </soap:Body> </soap:Envelope>"; using var httpClient = new HttpClient(); // 设置SOAPAction请求头,值对应WebService方法的命名空间+方法名 httpClient.DefaultRequestHeaders.Add("SOAPAction", "http://tempuri.org/GetPhoneInfo"); // 构造请求内容,指定内容类型为text/xml var content = new StringContent(soapRequest, Encoding.UTF8, "text/xml"); // 发送POST请求到WebService地址 var response = await httpClient.PostAsync("http://xxx/Service.asmx", content); // 读取返回的XML内容 var responseContent = await response.Content.ReadAsStringAsync(); // 解析XML获取结果(可以用XmlDocument或XDocument来解析)
二、动态创建TextBox的完善方案
看你已经写了一部分jQuery代码,我帮你补全并优化一下,确保功能完整且用户体验更好:
完整实现代码
<!-- 页面结构:输入框容器 + 添加按钮 --> <div id="PhoneNumberContainer" style="margin: 10px 0;"></div> <button id="AddPhoneBtn" type="button">添加电话号码</button> <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script> <script> $(document).ready(function() { let counter = 1; // 初始化计数器,从1开始编号 // 绑定添加按钮的点击事件 $("#AddPhoneBtn").click(function() { // 创建新的输入项容器 const newTextBoxDiv = $(document.createElement('div')) .attr("id", `PhoneItem_${counter}`) .css("margin", "8px 0"); // 简单加个间距,也可以用CSS类控制样式 // 拼接输入项的HTML,补全input属性并增加删除按钮 newTextBoxDiv.html(` <label>电话号码 ${counter}:</label> <input type="text" name="PhoneNumber_${counter}" id="PhoneInput_${counter}" placeholder="请输入11位手机号" style="width: 200px; margin: 0 8px;" /> <button class="RemovePhoneBtn" data-item-id="${counter}">删除</button> `); // 将新输入项添加到容器中 $("#PhoneNumberContainer").append(newTextBoxDiv); // 绑定删除按钮的点击事件 $(`.RemovePhoneBtn[data-item-id="${counter}"]`).click(function() { $(`#PhoneItem_${counter}`).remove(); // 如果需要重新给剩余输入项编号,可以在这里遍历容器内的元素重设label文本 }); counter++; // 计数器自增,准备下一个输入项的编号 }); }); </script>
补充说明
- 我给每个输入项加了删除按钮,用户可以随时删掉不需要的输入框,比只能添加更实用
- 补全了input的
id、placeholder属性,让代码更规范,也方便后续获取用户输入 - 如果是ASP.NET后端,提交表单后可以通过
Request.Form获取所有动态输入框的值:
[HttpPost] public IActionResult SubmitForm() { var phoneNumbers = new List<string>(); int index = 1; // 循环读取所有命名格式为PhoneNumber_xxx的表单值 while (!string.IsNullOrEmpty(Request.Form[$"PhoneNumber_{index}"])) { phoneNumbers.Add(Request.Form[$"PhoneNumber_{index}"]); index++; } // 这里可以对phoneNumbers进行验证或存储操作 return View(); }
内容的提问来源于stack exchange,提问作者krde
相关产品推荐
相关产品推荐

