.net中获取联动下拉菜单的值

今天在改一个别人做的网站,他采用了公有模版形式。将一个网站里所以相同的部分做一个模板,我以前从来没这么做过。主要是很难在Dreamweaver做美工。既然他的网站是模版形式,那就照他的思路下去吧。本来就麻烦点改着也差不多了。可是在做三级省市县联动菜单时遇到困难。

1、我想用一个JS文件配合网页来实现三个下拉菜单的联动。可是我下了JS文件之后,却无论如何也不能联动。让人匪夷所思。过了好长时候,发现生成的网页和我写的网站下拉菜单的ID竟然不一样,JS文件里所控制的菜单ID也找不到了,当然不能联动了。经过反复调试,仍然不能将生成的网站中的下拉菜单的ID设置成正确的ID,似乎在生成网页的时候会自动更改下拉菜单的ID。生成前的代码如下:

<%@ Page Language="C#" MasterPageFile="master.master" AutoEventWireup="true" CodeFile="infoadd.aspx.cs" Inherits="user_infoadd" %>
<%@ Register Src="inc/xwleft.ascx" TagName="xwleft" TagPrefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="body" Runat="Server">
  <uc1:xwleft ID="tleft1" runat="server" /> 
<div id="index">
<%--<script language="javascript" src="area.js"></script>
--%>    <div class="newtop" style=" height:30px;">
        <asp:Label ID="Label1" runat="server" Text="Label" ></asp:Label>
    </div>
    <div class="newbody">
    <ul>
    <li> <asp:Label ID="Label3" runat="server" Text="现在您排在 : "></asp:Label><span style=" padding-left:24px"></span> <span><asp:Label  ID="Label2" runat="server" Text="???" Visible="false" ForeColor="red"></asp:Label></span></li><li>卡号:<span style=" padding-left:24px"></span><span><asp:TextBox ID="TextBox0" runat="server" Text='<%# Session["cid"] %>' Enabled="false"></asp:TextBox></span></li><li>姓名:<span style=" padding-left:24px"></span><span><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></span></li><li>手机:<span style=" padding-left:24px"></span><span><asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></span></li><li>地区:<asp:DropDownList ID="province" runat="server">
        </asp:DropDownList>
        <asp:DropDownList ID="city" runat="server">
        </asp:DropDownList>
        <asp:DropDownList ID="county" runat="server">
        </asp:DropDownList>
     

        <span style=" padding-left:24px"></span></li><li>身份证号:<span><asp:TextBox ID="TextBox4" runat="server"></asp:TextBox></span></li><li>开户银行:<span><asp:TextBox ID="TextBox5" runat="server"></asp:TextBox></span></li><li>银行账号:<span><asp:TextBox ID="TextBox6" runat="server"></asp:TextBox></span></li><li>
        <asp:Button ID="Button1" runat="server" Text="确认无误,提交" OnClick="Button1_Click" />
        <asp:Label ID="Label4" runat="server" Text="提交资料后将无法修改"></asp:Label></li></ul>
   
    </div>
 
</div>
<!--js初始化函数-->
<%--   <SCRIPT language="javascript">
   setup()
   </SCRIPT>
--%>
</asp:Content>

 

生成后的网页如下:


<div id="index">
<script language="javascript" src="area.js"></script>
    <div class="newtop" style=" height:30px;">
        <span id="ctl00_body_Label1">返赠卡注册</span>
    </div>
    <div class="newbody">
    <ul>
    <li> <span style=" padding-left:24px"></span> <span></span></li><li>卡号:<span style=" padding-left:24px"></span><span><input name="ctl00$body$TextBox0" type="text" value="1" id="ctl00_body_TextBox0" disabled="disabled" /></span></li><li>姓名:<span style=" padding-left:24px"></span><span><input name="ctl00$body$TextBox1" type="text" id="ctl00_body_TextBox1" /></span></li><li>手机:<span style=" padding-left:24px"></span><span><input name="ctl00$body$TextBox2" type="text" id="ctl00_body_TextBox2" /></span></li><li>地区:地区:<select name="ctl00$body$province" id="ctl00_body_province">
</select>
        <select name="ctl00$body$city" id="ctl00_body_city">
</select>
        <select name="ctl00$body$county" id="ctl00_body_county">
</select>
        &nbsp;
  
        <span style=" padding-left:24px"></span></li><li>身份证号:<span><input name="ctl00$body$TextBox4" type="text" id="ctl00_body_TextBox4" /></span></li><li>开户银行:<span><input name="ctl00$body$TextBox5" type="text" id="ctl00_body_TextBox5" /></span></li><li>银行账号:<span><input name="ctl00$body$TextBox6" type="text" id="ctl00_body_TextBox6" /></span></li><li>
        <input type="submit" name="ctl00$body$Button1" value="确认无误,提交" id="ctl00_body_Button1" />
        <span id="ctl00_body_Label4">提交资料后将无法修改</span></li></ul>
   
    </div>
 
</div>
<!--js初始化函数-->
   <SCRIPT language="javascript">
   setup()
   </SCRIPT>
            
      </div>
百度了好久,也没找到是怎么回事,貌似好像以前没碰到过这种事情,难道会有模版有关?没关法,只好修改JS文件里所控制的下拉菜单的ID为 ctl00_body_province等。

2、这里我采用的是服务器端的组件。这个方便在CS文件里读出各个下拉菜单的选定值。可以无论我怎么做也读不出。出现一个很奇怪的错误:Invalid postback or callback argument.  Event validation is enabled using <pages

enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %>

in a page.  For security purposes, this feature verifies that arguments to postback or

callback events originate from the server control that originally rendered them.  If the data

is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order

to register the postback or callback data for validation. 

查了一下解决方法:

将EnableEventValidation="false",检查页面是否有多个form .

回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@

Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的

参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用

ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
这两天写程序总是遇到相似的程序在不同页面,出现不一样的结果。以下是今天出现的问题:

回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@

Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的

参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用

ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

上网搜索了一下,可行的解决方法有:

1、在页面的<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"

Inherits="_Default" %> 中添加 EnableEventValidation="false" 就可以了。(首先考虑的)

2、是Form嵌套,一个页面只能有一个Form,仔细检查代码就可以解决。

3、如果页面含有 DropDownList 或 ListBox这样的控件,可能以下原因造成:

    3.1  在下拉菜单中使用ajax,常见于省市联动菜单,可能是由于在aspx页面赋给了下拉菜单初始Item

值,在事件回发时提示该错误,将下拉菜单初始Item值删除,在绑定事件中添加Item项。

    3.2  原因是 DropDownList 控件的ListItem 的Value 属性 包含汉字.只要将Value 改为英文或数字

的就行了.最好在web.config中添加如下语句:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN"

uiCulture="zh-CN"/>因为 POSTBACK 如果不采用 UTF-8 编码, JAVASCRIPT 会认为有问题。
只改 requestEncoding="utf-8" 就可以了,responseEncoding="utf-8" 不用

参考了里面的方法仍然没用。就想到把服务器端组件改成客户端控件。

3、在改成客户端组件之后。我在CS文件里采用这种方式来读:

string s3 = Request.Form["ctl00_body_province"];

发现读不到,后来又用下拉菜单的NAME写到引号子里去试,居然读出来,原来这里用的不是ID。如下:

Request.Form["ctl00$body$province"]

总结:哎,功能算是完成了,不过我还是想不通,谁来帮我一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值