Repeater和控件的runat="server"分析

来源:互联网 发布:美国驻港总领馆 知乎 编辑:程序博客网 时间:2024/06/05 05:35

一、功能说明:

勾选复选框后,对是否输入了数量及其格式进行验证。


原始设计是多选,在后台进行验证;现在需改为单选,在前台进行验证。

二、原始代码:

HTML代码:(该部分代码置于repeater控件中)

<asp:Repeaterrunat="server" ID="ProductPlanList">


C#代码:


后台代码中,需经过执行验证然后为变量“str”置值,有其他地方用到该值。所以后台仍需保留验证。

三、思路分析:

1.该功能要将多选改为单选,所以得使用type=”radio”的控件,并且不能设置runat=”server”,因为一旦设置了该属性,控件的name属性会被服务器自动改变成不同的值,而单选要求在一组相同的name值中才能实现只选择一个。

2.该功能要实现的是在前后台同时加验证,后台需要从前台传值,即如果勾选了单选按钮需要把本行控件RadioButton的Checked属性传递给后台,但是并不能给控件RadioButton设置属性runat=”server”。所以需在前台添加一个隐藏域HiddenField控件,设置其属性runat=”server”,通过JS判断,当某行的控件RadioButton为Checked时,给HiddenField控件的Value属性赋值,并将该值传递给后台。

四、功能实现:

HTML代码:


JS代码:


C#代码:


五、总结:

1.原理:运行在服务器的控件,每个控件被服务器解析出来都必须有唯一标识id,id是其唯一区分标识。

2.置于Repeater中的控件,如果设置了runat=”server”属性,被服务器解析出来后,该控件的name和id都会改变。

如果不设置runat=”server”属性,服务器则会解析出来一组控件,该组控件具有同一个name和id。比如单选按钮这种情况,应该是一组控件,在该组控件中,只能选择一个。

3.置于Repeater外的控件,因为没有循环,只解析一次,所以无论设不设置runat=”server”属性,其name和id都不会被改变。

4.如果想要获取Repeater中的某个具有runat=”server”属性的控件,可以使用控件类型,比如type等,这些解析后不会被改变的属性。如$("input[type='radio']")。

或者通过查看解析后的html源代码,找到解析规律,然后再拼接字符串来计算name和id。如某控件<asp:TextBoxID="txtNum" runat="server" Class="form-text"value=""></asp:TextBox>

解析后id="ProductPlanList_txtNum_0",ProductPlanList是其外侧Repeater控件的ID,最后一个字符0是其tr行号。

0 0
原创粉丝点击