You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:27:34