Page_Load里 进行dropdownlist的数据绑定
for (int i = 0; i < 10; i++)
{
DropDownList1.Items.Add(new ListItem(i.ToString()));
}
另有一个button获取其值
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(DropDownList1.SelectedValue);
}可是如果禁用了viewstate的话,是获取不到值的...
大家都怎么解决的?不想打开viewstate
for (int i = 0; i < 10; i++)
{
DropDownList1.Items.Add(new ListItem(i.ToString()));
}
另有一个button获取其值
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(DropDownList1.SelectedValue);
}可是如果禁用了viewstate的话,是获取不到值的...
大家都怎么解决的?不想打开viewstate
解决方案 »
- 谈谈客户端控件与服务端控件的区别
- 如何对ListView的某些行特殊显示?
- asp.net自定义控件问题
- 关于ASP.NET Session一刷新网页就没有了
- 请问怎么保存网站(chs.gotdotnet.com)上的文章(包括相互间的链接)到本地硬盘?
- 我想 <sort s=1> 节点下的所有子节点做为数据源,该怎么做?
- 贴中贴,一共200分,解决个简单问题.快~~~~~~~~~
- 获取源码失败
- 一个奇怪的问题,谢谢
- 有关asp.net断点调试
- 开发论坛的问题
- div runat=server后document.getElementById("Div1").style.display="none"失败
试一下就知道了嘛...禁用viewstate..
@symbol441(≮西门潇洒≯)
嗯,是取不到值...我想问问如何解决这个问题?
========
你取不到值?我为什么可以呢?实际上即使你禁用ViewState的,也是可以的,
因为 DropDownList 实现了 IPostBackDataHandler ,其 SelectedValue 是每次回发都会回串的,并且保持选中状态只是,你这段代码本身逻辑上就有问题,
Button1_Click 再 Page_Load 之后执行,那么 Button1_Cllick 获取的永远是第一项的值
那么这个如何解决呢??必须要在page-load里绑定dropdownlist的数据的嘛...
{
if (!IsPostBack)
{
//绑定 dropdownlist
}
}
========
如果你要动态的添加项,并且又要禁用 ViewState,那么不能再 Load 阶段 处理,在 Init 阶段void Page_Init(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++) {
DropDownList2.Items.Add(new ListItem(i.ToString(), i.ToString()));
}
}当你禁用 ViewState 之后,页面回发之间不维护控件状态,那么你得确保,动态添加的代码每次
都能够执行,并且为了等到Post回来的值,只有在 Init 阶段或者更高处理, 因为 IPostBackDataEventHandler 接口中加载回发数据在 Load 之前完成
如果你按最常规的处理方式,如直接以声明的方式直接往 .aspx 添加静态项,或者是绑定数据,或者启用了ViewState,不回又这些问题,因为这些“常规”方法都是遵循的我上面提的那些机制,没有冲突。看来,
一方面,的确是 MS 惹的祸啊,把很多东西包装起来了,是方便了使用,降低了门槛,但是方便也就意味着某种程度上,做起来有点“傻瓜”,特别碰到非一般需求的时候,往往无法达到我们满意的效果。同时,但对于初学者,往往有点“浮”,总是渴望着“一步到位”,
哪些被 ASP.NET 隐藏的底层机理,如最基本的 HTTP 请求规范,html form 表单提交机理,没不熟悉,更不知道从何获取这些东东。
就像,很多初学者都提出,2。0中 xxxDataSource 好不好呢?与直接手动 DataBind 影响性能不?实际上如果你了解 ADO.NET 与 WebControl,那么很多可以得出这几点:
1。xxxDataSource 确实好,我个人认为,确实可以到达之前 ASP.NET Team 夸的提高 75% 以上的开发效率
2。性能?这与控件本身没有关系, xxxDataSource 内部也是调用的诸如 GridView.DataBind()方法来绑定数据, SelectCommand UpdateCommand 的SQL 或者SP依然是你提供了(只是提供了Wizard快速生成而已,高级的代码还是要你动手),封装了 ADO.NET 的常规步骤(如 new Connnection Open ExectueReader DataAdapert.Fill Connnection.Close 等等)
3。灵活性不好。什么东西都被你 xxxDataSource 完成了,那我敢什么?因此,对于初学者,特别是项目周期紧的,完成功能才是王道。管它性能怎么样,让它泡起来才是。当然这个前提是,你不能给自己埋定时炸弹,基本常识知道。如你 Open 了一个 Connection,记得我必须关闭这个 Connection。不过你放心,像 xxxDataSOurce 帮你生成的代码,你就放心用吧,人家是产品,自己是经过确认测试的。
说道这里,想到哪个老生畅谈的分页问题,还有那个涉及点 ajax 的js 相关问题,一有人问,楼下马上丢一句 “存储过程分页 吧”, “AJAX 吧”,好像他们才是万能,确实当到达某个瓶颈是,然后多数情况传统方法足以满足要求。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//绑定 dropdownlist
}
}
但是因为要做出东西来..没办法,只好冒昧来问了PS:if (!IsPostBack)
这样是不好用的...这个早就试过了的...
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//绑定 dropdownlist
}
}
for (int i = 0; i < 10; i++)
{
DropDownList1.Items.Add(new ListItem(i.ToString()));
}
另有一个button获取其值
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(DropDownList1.SelectedValue);
} 可是如果禁用了viewstate的话,是获取不到值的...
大家都怎么解决的?不想打开viewstate
-------------------------------------------------------------------------
禁用viewstate后,你试试this.Request[this.DropDownList1.UniqueID],这个值就是DropDownList1的SelectedValue,但是取不到dropDownList1的text值,如果需要可以考虑自己添加一个隐藏域hiddenfield来维护它的text值