Ozk*_*kan 24 .net forms asp.net validation
在我的表单中,我需要插入"text"类型的不同输入.输入必须是带有名称和ID的html控件.因为我将此表单发送到外部URL.
为了验证,我在所有输入中运行runat = server,然后我可以使用requiredfieldvalidator.
但问题是,当我在浏览页面后查看源名称和ID都已更改.例如
<input id="first_name" class="formright" type="text" name="first_name" runat="server" />
Run Code Online (Sandbox Code Playgroud)
改变为
<input name="ctl00$cphContent$first_name" type="text" id="ctl00_cphContent_first_name" class="formright">
Run Code Online (Sandbox Code Playgroud)
我必须使用html控件,因为外部postbackurl查看name和id值以查找控件.所以我不能使用asp控件.因为我使用了runat = server的html控件
我感谢任何帮助
Tow*_*own 27
这是因为您正在使用MasterPages.
内容页面中包含的控件采用基于母版页层次结构的动态ID,以避免重复ID.
如果需要在客户端脚本中引用控件ID和名称,则可以使用<%= first_name.ClientID %>
.
如果您使用的是.NET4,则可以使用ClientIDMode="Static"
生成的ID保持一致,但这会带来自己的ID冲突警告,例如,在页面上使用同一用户控件的多个实例时.Rick Strahl 在这里概述了这些.
但是,如果您使用的是ASP.NET验证器,那么一切都应该没问题.input
您应该使用ASP.NET TextBox控件而不是使用HTML :
<asp:TextBox id="first_name" runat="server" CssClass="formright" />
Run Code Online (Sandbox Code Playgroud)
Rad*_*erz 17
ClientIDMode="Static"
Run Code Online (Sandbox Code Playgroud)
这有用地锁定任何runat ="server"控件的ID,但是它不会锁定html输入元素的'name'属性.
在这个例子中看到输入上有runat ="server"属性的唯一原因是使用.Net验证,我建议使用外部JS库(如jQuery)来处理这个问题.
但是,如果像我一样,你需要改变value属性,我能看到的唯一解决方法是相当混乱.如果从输入中删除runat ="server",则可以在value =""属性中放置服务器控件(如文字).
例如:
<input id="first_name" class="formright" type="text" name="first_name" value="<asp:Literal id="litFirstNameValue" runat="server" />" />
Run Code Online (Sandbox Code Playgroud)
请不要因为这种糟糕的编码习惯而对我有所帮助,它的目的是使名称属性不会更改为.Net样式名称作为最后的手段.
有没有其他人知道另一种修复名称的方法?(表单元素未定义为runat ="server",但它嵌入在正常的.Net表单中,这就是服务器将其附加到主表单树的原因)
小智 12
ClientIDMode仅影响ID.如果你还需要管理name属性那么它就没用了.在我的情况下,我使用jQuery在客户端解决了这个问题.
$(function(){
$("#inputname").prop("name",$("#inputname").prop("id"));
});
Run Code Online (Sandbox Code Playgroud)
添加ClientIDMode="Static"
到控件,例如
<asp:TextBox ID="first_name" runat="server" ClientIDMode="Static" />
Run Code Online (Sandbox Code Playgroud)
这是.NET 4中的新功能.官方文档.
归档时间: |
|
查看次数: |
40411 次 |
最近记录: |