如何在C#中获取HTML输入框(expiration)失焦值及从数据库赋值?
关于HTML输入框失焦后C#取值及页面加载时数据库赋值的实现方案
没问题,结合你给出的Ext.NET页面代码,我来帮你解决这两个需求:
一、失焦后通过C#获取输入框的值
你的input标签已经设置了runat="server",属于服务器端控件,这里提供两种常用的实现方式:
方式1:触发整页回传获取值
通过客户端blur事件触发页面回传,然后在后台捕获并获取输入值:
- 修改input标签,添加
onblur事件触发回传:
<input id="expiration" type="text" placeholder="DD(uu)/MM(uu)/YY(uu)" class="masked" title="title" runat="server" pattern="^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$|(uu\/([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])\/[0-9]{1,4})|(uu\/uu\/[0-9]{1,4})|(uu\/uu\/uu)" data-valid-example="01/05/18" onblur="__doPostBack('expiration','')" />
- 后台C#代码中处理回传:
protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { // 判断回传的目标控件是expiration if (Request.Params["__EVENTTARGET"] == "expiration") { string inputValue = expiration.Value; // 这里可以执行你的业务逻辑,比如验证、存库等 } } }
方式2:AJAX异步获取(无刷新)
如果不想触发整页刷新,用AJAX异步传递值到后台:
- 添加客户端JS处理blur事件:
<script> // 给输入框绑定失焦事件 document.querySelector('#expiration').addEventListener('blur', function() { const inputVal = this.value; // 发送AJAX请求到后台 fetch('YourPage.aspx/SaveExpirationValue', { method: 'POST', headers: { 'Content-Type': 'application/json; charset=utf-8' }, body: JSON.stringify({ val: inputVal }) }) .then(response => response.json()) .then(data => { console.log('值已成功传递到服务器'); // 可以在这里添加成功后的UI反馈 }) .catch(error => console.error('请求出错:', error)); }); </script>
- 后台C#添加WebMethod接收值:
using System.Web.Services; // 注意这个方法必须是静态的 [WebMethod] public static void SaveExpirationValue(string val) { // 这里就拿到了失焦后的输入值,可直接用于业务处理 // 比如写入数据库或者做验证 }
二、页面加载/刷新时从数据库读值并设置到输入框
因为输入框是服务器端控件,直接在页面初始化阶段(非回传时)从数据库查询值并赋值即可:
后台C#代码示例
protected void Page_Load(object sender, EventArgs e) { // 仅在首次加载或刷新时执行(排除回传场景) if (!IsPostBack) { // 从数据库查询目标值,这里是伪代码,你需要替换成实际的数据库操作 string dbValue = GetExpirationDateFromDB(); // 如果查询到值,就设置到输入框 if (!string.IsNullOrWhiteSpace(dbValue)) { expiration.Value = dbValue; // 如果数据库存的是DateTime类型,记得转成输入框要求的格式,比如: // expiration.Value = ((DateTime)dbValue).ToString("dd/MM/yy"); } } } // 示例:从数据库读取日期的方法 private string GetExpirationDateFromDB() { string result = string.Empty; // 这里写你的数据库查询逻辑,比如用SqlConnection /* using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["YourConnStr"].ConnectionString)) { string query = "SELECT ExpirationDate FROM YourTableName WHERE YourCondition"; var cmd = new SqlCommand(query, conn); conn.Open(); var dbResult = cmd.ExecuteScalar(); if (dbResult != null) { // 转换为输入框需要的日期格式 result = ((DateTime)dbResult).ToString("dd/MM/yy"); } } */ return result; }
注意点
- 确保你的数据库连接字符串配置在
Web.config的<connectionStrings>节点中,避免硬编码。 - 数据库中的日期格式要和输入框的
DD/MM/YY格式匹配,必要时做格式转换,防止显示异常。
内容的提问来源于stack exchange,提问作者aggicd
相关产品推荐
相关产品推荐

