DropDownList<SelectedIndexChanged>

本文介绍了一种使用DropDownList来控制图片显示的方法。通过设置AutoPostBack为true,实现当DropDownList选项改变时,右侧img元素能及时更新对应图片路径。
今天弄了一个用DropDownList选择图片名称,让又侧img显示相应图片的东东。
思路是这样的:通过改变DropDownList的选项进而改变右侧img的图片路径以达到目的。
代码通过DropDownList的SelectedIndexChanged事件执行,但是在做的时候,这个事件总是不执行到后来才发现有一个叫AutoPostBack的属性没设true,所以一直不执行。大家在做类似东西的时候要牢记啊。
<%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“AddNewUser.aspx.cs” Inherits=“Admin_lizhitong_AddNewUser” %> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=“http://www.w3.org/1999/xhtml”> <head runat=“server”> <title>注册新用户</title> <link href=“/css/Style.css” rel=“stylesheet” type=“text/css” /> </head> <body> <form id=“form1” runat=“server”> <div> <table border=“0” width=“100%” cellspacing=“1” cellpadding=“2” id=“table2” class=“tableBorder”> <tr> <th valign=“middle” colspan=“2” height=“25”> <table align=“center” width=“100%”> <tr> <td width=“96%” colspan=“2”> 注册用户 </td> </tr> </table> </th> </tr> <tr> <td width=“150” height=“47” align=“center” class=“forumRow”> 用户名: </td> <td class=“forumRow” align=“left”> <asp:TextBox ID=“tbYHM” runat=“server” Height=“19px” Width=“200px” spellcheck=“false” autocomplete=“off” aria-autocomplete=“none”></asp:TextBox> </td> </tr> <tr> <td width=“150” height=“47” align=“center” class=“forumRow”> 用户密码: </td> <td class=“forumRow” align=“left”> <asp:TextBox ID=“tbYHMM” runat=“server” Height=“19px” Width=“200px” spellcheck=“false” autocomplete=“off” aria-autocomplete=“none”></asp:TextBox> </td> </tr> <tr> <td width=“150” height=“47” align=“center” class=“forumRow”> 确认密码: </td> <td class=“forumRow” align=“left”> <asp:TextBox ID=“tbQRMM” runat=“server” Height=“19px” Width=“200px” spellcheck=“false” autocomplete=“off” aria-autocomplete=“none”></asp:TextBox> <asp:Literal ID=“mmErrorMessage” runat=“server”></asp:Literal> </td> </tr> <tr> <td width=“150” height=“47” align=“center” class=“forumRow”> 用户姓名: </td> <td class=“forumRow” align=“left”> <asp:TextBox ID=“tbYHXM” runat=“server” Height=“19px” Width=“200px” spellcheck=“false” autocomplete=“off” aria-autocomplete=“none”></asp:TextBox> </td> </tr> <tr> <td width=“80” height=“47” align=“center” class=“forumRow”> 所属区域: </td> <td class=“forumRow” align=“left”> <div class=“dropdown-container” style=“max-width: 450px;”> <asp:DropDownList ID=“ddlZJ” CssClass=“custom-dropdown” runat=“server” AutoPostBack=“True” onselectedindexchanged=“ddlZJ_SelectedIndexChanged”></asp:DropDownList> <asp:DropDownList ID=“ddlPCS” CssClass=“custom-dropdown” runat=“server” AutoPostBack=“True” onselectedindexchanged=“ddlPCS_SelectedIndexChanged”></asp:DropDownList> <asp:DropDownList ID=“ddlVillage” CssClass=“custom-dropdown” runat=“server” AutoPostBack=“True”></asp:DropDownList> </div> </td> </tr> <tr> <td width=“150” height=“47” align=“center” class=“forumRow”> 工作单位: </td> <td class=“forumRow” align=“left”> <asp:TextBox ID=“tbGZDW” runat=“server” Height=“19px” Width=“200px” spellcheck=“false” autocomplete=“off” aria-autocomplete=“none”></asp:TextBox> <td class=“forumRow” align=“left”> <asp:DropDownList ID=“ddlYHJS” CssClass=“custom-dropdown” style=“width:300px;” runat=“server”></asp:DropDownList> </td> </tr> <tr> <td valign="middle" colspan="2" align="center" class="forumRow"> <span style="color: Red; padding-left: 10px;"> <asp:Button ID="btSubmit" runat="server" Text="提交注册" OnClick="btSubmit_Click" />  <asp:Literal ID="ltMessage" runat="server"></asp:Literal></span> </td> </tr> </table> </div> </form> </body> </html> 怎么让tbQRMM和tbYHMM显示为*号,不用TextMode="Password"方法
最新发布
03-22
<think>嗯,用户问的是如何在ASP.NET页面中让两个文本框(tbQRMM和tbYHMM)显示为星号,但又不使用TextMode="Password"的方法。首先,我需要理解为什么用户不想用TextMode属性。可能的原因是什么呢?也许他们担心使用Password模式会导致某些安全问题,或者可能在某些浏览器中有兼容性问题?或者他们可能希望保持输入的可见性但用星号代替,但通常Password模式就是用来隐藏输入的。不过用户明确说不使用这个方法,所以需要找其他替代方案。 接下来,我需要回忆ASP.NET中TextBox控件的其他属性或方法。TextMode设为Password是最直接的方法,但用户排除了这个选项。那有没有其他方式可以模拟显示星号呢?比如,使用CSS来隐藏输入内容,或者用JavaScript在用户输入时替换字符为星号?或者在后端处理输入时显示星号,但这样可能会影响实际的数据获取,因为用户输入的真实内容会被替换掉,导致密码无法正确传递。 另外,考虑到用户可能希望前端显示星号,但后端仍然能获取真实的输入值,这时候如果用JavaScript替换输入内容,同时保存原始值到另一个隐藏字段,可能是一个办法。但这样需要处理多个事件,比如oninput、onkeydown等,来实时替换用户的输入,并将原始值保存在某个地方,比如隐藏的input中。这样,当表单提交时,实际发送的是隐藏字段的值,而不是显示的星号。但这种方法比较复杂,且可能存在安全风险,因为密码可能在客户端被处理,容易被窃取。 或者,可以使用CSS样式来掩盖输入内容,比如设置-webkit-text-security属性,修改输入文本的显示方式为星号。这样不需要改变TextMode,而是通过CSS来实现。不过这个属性是特定于WebKit浏览器的,可能在其他浏览器中不兼容,比如Firefox或IE。需要检查浏览器的兼容性。如果用户主要使用Chrome或基于WebKit的浏览器,这可能是一个可行的解决方案。但如果是需要跨浏览器支持,可能需要其他方法。 另外,有没有可能使用ASP.NET的控件属性或者服务端代码来动态替换文本?不过服务端处理是在提交之后,无法实时显示星号,所以不太可行。必须在前端处理。 总结一下可能的方案: 1. 使用CSS的text-security属性,但需要考虑浏览器兼容性。 2. 使用JavaScript在输入时替换字符为星号,同时保存原始值到隐藏字段。 3. 使用第三方库或插件来实现密码框的样式。 首先,检查CSS的方案。text-security是一个比较新的属性,可能需要加上浏览器前缀,比如-webkit-text-security。例如: input.custom-password { -webkit-text-security: disc; text-security: disc; } 但需要确认是否支持其他浏览器。例如,Firefox可能不支持,所以这种方法可能不通用。如果用户的环境允许,比如内部系统只用Chrome,那可能可行。 其次,JavaScript的方法。例如,监听输入事件,将输入的字符替换为星号,同时记录真实的输入到另一个变量或隐藏字段。例如: var tbYHMM = document.getElementById('<%= tbYHMM.ClientID %>'); var tbQRMM = document.getElementById('<%= tbQRMM.ClientID %>'); var realPassword = ''; tbYHMM.addEventListener('input', function(e) { realPassword += e.data; this.value = '*'.repeat(this.value.length); }); 但这种方法可能会有问题,比如处理退格、光标位置、复制粘贴等情况,需要更复杂的处理。比如,用户按退格键时,需要从realPassword中删除最后一个字符,同时更新显示的星号。此外,如果用户移动光标位置进行修改,处理起来会更麻烦。因此,这种方法实现起来比较复杂,容易出错,且可能影响用户体验。 第三种方法,使用第三方库,比如jQuery插件或者其他前端库,来模拟密码输入框。但需要引入额外的库,可能增加系统负担,且用户可能不希望这样做。 综合考虑,如果用户的环境支持WebKit,使用CSS可能是最简单的办法。否则,可能需要权衡是否接受浏览器兼容性问题,或者采用JavaScript方案,但需要处理各种输入情况。 另外,可能用户不希望使用TextMode="Password"是因为样式问题,比如默认的Password输入框在浏览器中的样式不符合需求,这时候可以通过CSS来覆盖默认样式,同时保留TextMode="Password",这样既保证了功能,又美化了外观。不过用户明确要求不使用TextMode,所以可能需要排除这个选项。 综上所述,可能的解决方案是使用CSS的text-security属性,并添加浏览器前缀,或者使用JavaScript来动态替换输入内容。需要向用户说明这两种方法的优缺点,以及可能存在的兼容性问题。</think>让我们分步骤解决这个问题: ### 方法一:CSS文本安全属性(推荐) ```html <asp:TextBox ID="tbYHMM" runat="server" CssClass="password-mask" <!-- 添加CSS类 --> Height="19px" Width="200px" spellcheck="false" autocomplete="off" aria-autocomplete="none"> </asp:TextBox> <style> .password-mask { -webkit-text-security: disc; /* 兼容Chrome/Safari */ text-security: disc; /* 标准属性 */ } </style> ``` ### 方法二:JavaScript动态替换(复杂方案) ```javascript function maskInput(inputElement) { let realValue = ''; inputElement.addEventListener('input', function(e) { // 记录真实值到隐藏字段 realValue = this.value; this.value = '*'.repeat(realValue.length); }); // 提交前恢复真实值 document.forms[0].addEventListener('submit', function() { inputElement.value = realValue; }); } // 初始化 maskInput(document.getElementById('<%= tbYHMM.ClientID %>')); maskInput(document.getElementById('<%= tbQRMM.ClientID %>')); ``` ### 两种方法对比: | 特性 | CSS方案 | JavaScript方案 | |---------------------|----------------------------------|-----------------------------------| | 兼容性 | 仅限WebKit浏览器 | 全浏览器支持 | | 安全性 | 中(仍为password输入行为) | 低(需自行处理数据) | | 实现复杂度 | 简单 | 复杂(需处理光标/粘贴等事件) | | 移动端支持 | 优秀 | 需额外适配 | ### 补充说明: 1. 如果必须兼容所有浏览器,建议使用`TextMode="Password"`并自定义样式: ```css input[type="password"] { /* 自定义密码框样式 */ border: 1px solid #ccc; padding: 5px; } ``` 2. 若坚持不使用Password模式,建议优先采用CSS方案,但需在项目中声明浏览器兼容要求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值