C#动态生成DropDownList执行失败原因分析

本文实例分析了C#动态生成DropDownList执行失败原因。分享给大家供大家参考。具体如下:

今天研究DDL控件的动态生成的时候遇到了点问题 ,当我写代码的时候发现点击button后 只能创建一个DDL控件,再点击就没有作用了,后来我在里面设置了变量,看看这个事件是不是没有执行,发现变量并没有改变,刚刚有点疑惑不解,后来发现当我触发其它事件的时候,控件消失了!我想,button的click事件会回传,而回传后新建的控件就会消失,我才明白,原来每次都有创建新的控件,只是每次再次点击button的时候回传页面,导致之前产生的控件消失了,而那唯一的一个控件是这次生成的,我又查询了一下asp的生命周期 看来对于页面的生命周期理解的不清楚会出好多问题。

简单的说 页面的生命周期分为下面几个过程

1.初始化(Init)
2.控件状态的装载(LoadControlState)
3.视图装载(LoadViewState)
4.回传的数据处理(LoadPostData)
5.页面加载(OnLoad)
6.渲染(OnPreRender)
7.保存视图状态(SaveViewState)
8.保存控件状态(SaveControlState)
9.呈现(Render)

这里当我在新点击button触发新建DDL控件的事件的时候,这个事件执行了,但是上一次创建的控件并没有保存状态,所以出现了上面的问题
简单研究了一下保存状态的方法,就是把状态保存到HiddenField中

<body>
 <form id="form1" runat="server">
 <div>
  <asp:HiddenField ID="hidden" runat="server" />
  <asp:Button ID="Btn" runat="server" Text="动态创建"
   onclick="Btn_Click" />
  <asp:Button ID="GetValue" runat="server" Text="获取选中的值"
   onclick="GetValue_Click" />
  <asp:Label ID="lbl" runat="server" Text=""></asp:Label>
  <asp:Panel ID="PanelControl" runat="server">
  </asp:Panel>
 </div>
 </form>
</body>

下面是动态创建code  原理为点击按钮 给HiddenField赋值或者可以给ViewState赋值然后再创建控件,这样再每次进入页面的时候,判断iddenField或者Viewstate是否有值,有就显示那个动态创建的控件,这样就把状态保存住了,当你再点击其他控件时,既不会再消失了。

protected void Page_Load(object sender, EventArgs e)
if (!string.IsNullOrEmpty(Hidden.Value) && Hidden.Value=="flag")
{
   CreateDropDownList();
}
if(!isPostBack) //创建控件不能写在这里,这个是判断是否为回发
{
}
}
protected void Btn_Click(object sender, EventArgs e)//创建控件
{
  Hidden.Value = "flag";//这里说明已经创建过一个控件了
  CreateDropDownList();
}

接下来是创建ddl的基本代码

private void CreateDropDownList()
{
  DropDownList ddl = new DropDownList();
  ddl.ID = "ddl";
  ddl.Items.Add(new ListItem("1", "1"));
  ddl.AutoPostBack = true;
  ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
  //给ddl添加事件
  PanelControl.Controls.Add(ddl); //放进容器
}

下面为点击控件  获得动态创建的控件选中的值  道理也是回发

protected void GetValue_Click(object sender, EventArgs e)
{
  DropDownList ddl = PanelControl.FindControl("ddl") as DropDownList;
  if (ddl != null)
  {
   lbl.Text ="点击按钮得到的值为"+ddl.SelectedValue;
  }
}

动态创建的ddl的事件

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
  DropDownList ddl= sender as DropDownList;
  if (ddl != null)
  {
   lbl.Text ="通过自身回发事件得到的值为"+ddl.SelectedValue;
  }
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • 解决DropDownList总是选中第一项的方法

    在网页开发的过程中,在页面中使用了一个 DropDownList 服务器控件,发现了一个很奇怪的问题,不论在页面中选中哪一项,在后台获取到的值总是第一项的值,看了好久也没有发现问题出在哪里,DropDownList控件在开发中已经使用了无数遍了,对照了其他代码都是一样的! 经过了几分钟之后,实在是看不出问题在哪里只好到网上查找答案,网上果然有不少人遇到"一样"的问题-- DropDownList 总是选中第一项.网上的解决方法都是说在 DropDownList 绑定时要在 Page_L

  • 基于Jquery的将DropDownlist的选中值赋给label的实现代码

    jquery代码 复制代码 代码如下: $(function() { $("#DropDownList1").bind("change", function() { $("#Label1").text($("#DropDownList1 option:selected").text()); }); 或者 复制代码 代码如下: $("#DropDownList1").bind("change&quo

  • JS简单操作select和dropdownlist实例

    本文实例讲述了JS简单操作select和dropdownlist的方法.分享给大家供大家参考.具体实现方法如下: 一.js选中服务器控件select与dropdownlist 1. js操作服务器控件select 复制代码 代码如下: <select id="selectID" onchange="return showMessage()">      <option value="0">==请选择==</optio

  • DropDownList设置客户端事件思路

    假设:数据源控件GrdiView,无刷新UpdatePannel,友情提示UpdateProgress,分页下拉框DropDownList 一般情况下:Gridview的分页有linkbutton或者button,这样要是想让UpdateProgress提示,很简单,先让GridView隐藏,然后给它加个OnClientClick就搞定! 在DropDownList的onchange事件里: function selectChange() { if ($("select option"

  • DropDownList绑定数据表实现两级联动示例

    场景一:平时我们在DropDownList控件下添加下拉选项时,都会使用它的Item.Add方法,直接在代码下添加.如果我们想添加或修改下拉选项,则必须去修改源代码.如果几个DropDownList控件的下拉选项相同,我们则需要重复添加好多次,后期的维护工作很不方便. 场景二:我们在12306网站买票时,肯定遇到过这么一种情景:我们需要先选定目的地的省份,选完省份后在城市选框中会自动加载该省份的城市,实现两级联动. 针对以上两个场景,我们可以用DropDownList直接绑定数据表,根据选择的省

  • DropDownList获取的SelectIndex一直为0的问题

    1.想要DropDownList自动提交必须设置AutoPostBack="true"属性,下面是代码: 复制代码 代码如下: <asp:DropDownList ID="ddlNameList" runat="Server" Height="30" AutoPostBack="True" onselectedindexchanged="ddlNameList_SelectedIndexCh

  • ASP.NET MVC中为DropDownListFor设置选中项的方法

    在MVC中,当涉及到强类型编辑页,如果有select元素,需要根据当前Model的某个属性值,让Select的某项选中.本篇只整理思路,不涉及完整代码. □ 思路 往前台视图传的类型是List<SelectListItem>,把SelectListItem选中项的Selected属性设置为true,再把该类型对象实例放到ViewBag,ViewData或Model中传递给前台视图. 通过遍历List<SelectListItem>类型对象实例 □ 控制器 public Action

  • ASP.NET DropDownListCheckBox使用示例(解决回发问题)

    这个是根据LigerUI改的,解决了回发问题  资料地址 http://ligerui.com/demos/comboBox/comboBoxMul.htm 具体代码 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CheckBoxList.aspx.cs" Inherits="CheckBoxList" %> <!DOCT

  • 深入DropDownList用法的一些学习总结分析

    首先绑定数据.现收集dropdownlist 的三种 databind 方法如下:基础数据绑定:用ListItem直接枚举出来,适用于不需要修改的类型列表. 复制代码 代码如下: <asp:DropDownList ID="DropDownList1" runat="server">    <asp:ListItem Value="设计家园">设计家园</asp:ListItem>    <asp:Lis

  • C#动态生成DropDownList执行失败原因分析

    本文实例分析了C#动态生成DropDownList执行失败原因.分享给大家供大家参考.具体如下: 今天研究DDL控件的动态生成的时候遇到了点问题 ,当我写代码的时候发现点击button后 只能创建一个DDL控件,再点击就没有作用了,后来我在里面设置了变量,看看这个事件是不是没有执行,发现变量并没有改变,刚刚有点疑惑不解,后来发现当我触发其它事件的时候,控件消失了!我想,button的click事件会回传,而回传后新建的控件就会消失,我才明白,原来每次都有创建新的控件,只是每次再次点击button

  • vue项目在线上服务器访问失败原因分析

    珊妹儿遇到一个奇葩问题哈,跟大家伙来分享分享,首先因为刚接手的项目,我还没有线上服务器的连接信息,前端代码都是我打包好给别人,别人传到服务器的,传到线上服务器访问不了,这就是中间出现了问题. 所谓,打包就是压缩的概念,而压缩文件再次压缩就会导致文件成倍的增大,这中间就出现了很多问题,我们排除了很多问题都没找见原因,后来我就寻思拿U盘拷一份再试试,结果成功了!!!!! 据珊妹儿多年经验来分析,用U盘直接拷贝的是源文件,而压缩完传过去的压缩包再解压缩,就不是原来的文件了!嗯 应该是这个原因.....

  • MySQL定时任务不能正常执行的原因分析及解决方法

    目录 前言 原因分析及解决方法 让定时任务快速执行 总结 前言 在使用数据库定时任务时,常常会出现定时任务不执行的问题,现对该问题出现的原因及解决方案做一些分析和整理. 原因分析及解决方法 当我们发现MySQL的定时任务没有执行时,首先去定时任务中查看[上次运行]时间是否正确,判断其是否正常执行,如果正常执行则需要考虑是否是事件逻辑不正确. 如果上次运行时间为空或者不正确,则需要查看数据库是否打开了定时任务,通过执行下列查询语句进行查询 show VARIABLES like '%event_s

  • VS Code安装go插件失败原因分析以及解决方案

    目录 问题背景 问题原因 解决方案 方案1:快速方案 方案2:环境变量中配置 方案3:vscode中配置 总结 问题背景 VSCode是我们开发go程序的常用工具,但是安装VSCode成功后,创建一个.go文件会有如下提示: 这个是vscode提示你需要安装go插件,但是当你点击install all进行安装时,发现会安装失败. Installing 8 tools at D:\pragrams\go\bin  gocode  gopkgs  go-outline  go-symbols  dl

  • 关于@Scheduled不执行的原因分析

    目录 @Scheduled不执行的原因 1. 今天用@Schedule做了一个定时任务 2. 首先遇到查到的一个解决方案 3. 还有版本说要在spring 4. 又查到版本说要在Bean上加上@Lazy(false) @Scheduled不生效的排查记录 @Scheduled 不生效的排查记录 @Scheduled不执行的原因 1. 今天用@Schedule做了一个定时任务 希望凌晨1点执行,代码如下 @Service public class ParseJsonService { @Sched

  • 关闭页面时window.location事件未执行的原因分析及解决方案

    1.问题描述: JS中定义widow.location = function(),页面关闭时,logout()函数未执行. window.onunload = function() { logout(); } function logout(reqParam, callback){ var userManageServiceUrl = "http://" + getServerAddr() + "/axis2/services/UserManageService";

  • crontab定时任务不执行的原因分析与解决方法

    前言 实现Linux定时任务有:cron.anacron.at等,cron是服务名称,crond是后台进程,crontab则是定制好的计划任务表 然而今天真是长知识 用了 crontab 这么久 才知道原来也需要 启动 添加了定时任务 但是并不好使 [root@dev-gl-lh1 ApiAgent]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For deta

  • php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法

    今天遇到GD的resizeimage 函数处理jpg后缀文件的缩略图的时候 提示该图片不是合法的jpg图片并报错 <b>Warning</b>: imagecreatefromjpeg(): gd-jpeg, libjpeg: recoverable error: Invalid SOS parameters for sequential JPEG 国内网上查了很多资料也没找到有效的解决办法,原来只要把 GD的jpeg文件支持打开即可解决 ini_set('gd.jpeg_igno

  • 关于动态生成dom绑定事件失效的原因及解决方法

    之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试了一下: 1. 事件失效的原因: (1)bind事件绑定只对dom中存在的元素有效,对于我们后来动态增加的元素是监测不到,所以绑定不了 (2)同样,当你使用var aa = document.getElementsByTagName("动态生成的元素");来获取动态生成的元素的时候也是获取

  • 在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析

    当我用defunkt/jquery-pjax载入Yii2的ActiveForm时发生一个错误,正常情况下是 ActiveForm的两个js应该先载入,而实际情况是 typeError:JQuery(...).yiiActiveForm is not a function. 在github的issues对这个问题已经讨论并得到了解决. Pjax首先通过html()执行内联的<script>,然后才通过executeScriptTags()执行带着src的<script>,所以导致找不

随机推荐