• Asp.net中慎用Page.DataBind()


    问题代码

    Default.aspx:

    代码
    <asp:DropDownList ID="ddlTradingServiceType" CssClass="s_w90 m-r0" runat="server"
            EnableViewState
    ="false">
            
    <asp:ListItem Value="-1">全部</asp:ListItem>
            
    <asp:ListItem Value="consignment">寄售交易</asp:ListItem>
            
    <asp:ListItem Value="escort">担保交易</asp:ListItem>
            
    <asp:ListItem Value="id">帐号交易</asp:ListItem>
            
    <asp:ListItem Value="api">官方合作交易</asp:ListItem>
            
    <asp:ListItem Value="cardservice">点卡交易</asp:ListItem>
        
    </asp:DropDownList><a href="?ts=nodefine">跳跳</a>

    Default.aspx.cs:

    代码
    protected void Page_Load(object sender, EventArgs e)
            {
                
    if (!string.IsNullOrEmpty(Request.QueryString["ts"]))
                {
                    ddlTradingServiceType.SelectedValue 
    = Request.QueryString["ts"];
                    ddlTradingServiceType.DataBind();
                }
            }

    当页面点击"跳跳"时,页面会报错


    原因在我给dllTradingServiceType.SelectedValue赋值后,调用了DataBind(),而在控件数据绑定的时候,服务会发现dllTradingServiceType的Items集合中没有Value为nodefine的项,故报无效SelectedValue的错误。往往在写程序时我们会给DropDownList控件的SelectedValue赋值一个不存在的Value,如果我们不调用DataBind(),服务器是不会检测项目列表的,故不会出错,事实上这种写法存在问题。MSDN对Page.DataBind()的解释:
    Binds a data source to the invoked server control and all its child controls.

    Remarks
    Use this method to bind data from a source to a server control. This method is commonly used after retrieving a data set through a database query.

    Note   When called on a server control, this method resolves all data-binding expressions in the server control and in any of its child controls.

    This method is commonly overridden when creating custom templated data-bound controls. For more information, see Developing a Templated Data-Bound Control.

    For more information about data binding to server controls, see Data Binding Expression Syntax.

    作者:Olar Tan
    出处:http://www.cnblogs.com/olartan
    ♪:没有做不到的 只有偷懒而错过的 ♪

  • 相关阅读:
    02-zabbix安装部署
    01-zabbix服务说明
    00-ContOS 7.5编译安装MySQL-5.7.30
    bitset习题
    数颜色[分块]
    旋转子段 (思维stl)
    双栈排序(洛谷P1155)二分图的判定+思维贪心
    常见的系统获取唯一码方式
    SHELL-数组
    Prometheus-alertmanager组件使用
  • 原文地址:https://www.cnblogs.com/olartan/p/1751505.html
Copyright © 2020-2023  润新知