可恶的ViewState_可恶的DropDownList

这几天在写一个网上商城的例子,其中商品添加和编辑页面用到了DropDownList,在操作DropDownList时遇到了几个问题:

(1)若在Page_Load中绑定DropDownList,则它的SelectedValue会始终为列表中的第一项(不知道为什么,可能与页的生命周期等有关,不懂。。),我的解决方法是改在Page_PreRender中绑定,代码示例:

protected void Page_PreRender(object sender, EventArgs e)
        {
            DataAccess DataAs = new DataAccess();
            DataTable DT = DataAs.CreateDataTable("select * from Categories");
            selCatetories.DataSource = DT;
            selCatetories.DataTextField = "name";
            selCatetories.DataValueField = "category_id";
            selCatetories.DataBind();
        }

这样SelectedValue就没问题了

(2)在禁用了页面的ViewState之后,DropDownList的SelectedValue始终为空,我的解决方法是不使用DropDownList控件而改为用html表单控件select,并添加一type=hidden的input控件,然后添加javascript代码,代码示例:

<script type="text/javascript">
        $(function() {
            var selValue = $("#selCatetories").val();
            $("#curValue").val(selValue);
            //            alert($("#curValue").val());
            $("#selCatetories").change(function() {
                var selValue = $(this).val();
                //                alert(selValue);
                $("#curValue").val(selValue);
                //                alert($("#curValue").val());
            });
        })
    </script>

 

select和hidden:

<input type="hidden" id="curValue" runat="server" />
<select id="selCatetories" runat="server" style="width: 153px;"></select>
(我想其实DropDownList的原理估计也就是这样了)

 

这样问题就全部解决了(其实解决他们花了我好长时间)。ol......

 

另外还有一些值得记录的知识点:

(1)_____禁用ViewState之后DataPager、DropDownList等好多服务器控件都不能用了,还有如果用visible等于false的textbox控件保存值也会失效

(2)_____无刷新分页 在$.post()外找不到动态生成的元素

(3)_____控制repeater的显示方式
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
           if (e.Item.DataItem != null)
            {
                if ((e.Item.ItemIndex + 1) % 3 == 0)
                {
                    e.Item.Controls.Add(new LiteralControl("</tr><tr><td colspan=3><hr /></td></tr><tr>"));

                }
            }

        }
(4)_____sql中的like匹配查询也不能用动态sql,如select item_id,name,base_price,small_image_url from [Items] where name like '%@name%',这样是不行的

(5)_____html控件select也能通过设置它的runat=server来在c#代码中用datasource的方式绑定,但是如果禁用了viewstate还是无法取得它的value(selectedvalue) 所以说viewstate是个大问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值