代码之家  ›  专栏  ›  技术社区  ›  DreamTeK

如何将asp:DropDownList SelectedValue设置为会话变量?

  •  2
  • DreamTeK  · 技术社区  · 11 年前

    有几篇文章描述了如何做到这一点,但这是代码隐藏的:

    是否可以将下拉列表的值设置为aspx页面上的会话变量?

    我正在使用SqlDataSource填充dropdownlist,因此如果可以避免,我不希望添加代码。

    <asp:DropDownList ID="ddl" runat="Server" DataSourceID="sqlDS" DataValueField="ID" DataTextField="TEXT" AppendDataBoundItems="true">
      <asp:ListItem Text="" Value="" Selected="True" />
    </asp:DropDownList>
    
    <asp:SqlDataSource ID="sqlDS" runat="Server" SelectCommand="spDS" SelectCommandType="StoredProcedure" />
    

    设置 会话(“ID”) 作为选定的负载值?


    下拉列表已从sqldatasource填充。我只想在页面加载时设置初始值。

    3 回复  |  直到 11 年前
        1
  •  2
  •   Win    11 年前

    您需要服务器端代码才能使用 一场 。以下代码不需要代码隐藏文件,但同样需要内部代码 剧本 将在运行 服务器端 .

    <asp:DropDownList ID="ddl" runat="Server" 
       DataSourceID="sqlDS" 
       DataValueField="ID" 
       DataTextField="TEXT" 
       AppendDataBoundItems="true"
       OnSelectedIndexChanged="ddl_SelectedIndexChanged" 
       AutoPostBack="True">
      <asp:ListItem Text="" Value="" Selected="True" />
    </asp:DropDownList>
    
    <asp:SqlDataSource ID="sqlDS" runat="Server" 
      SelectCommand="spDS" SelectCommandType="StoredProcedure" />
    
    <script runat="server">
        protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
        {
            Session["SelecteValue"] = ddl.SelectedValue;
        }
    </script>
    

    注: 确保 AutoPostBack="True" 对于DropDownList。

        2
  •  1
  •   Yuriy Galanter    11 年前

    不要将代码与标记混合。出于许多原因,将它们分开是有意义的。所以ASPX将只有演示,CS/VB只有代码逻辑。

    当您编译/部署您的端到生产时,将不会有“第二页”,只有ASPX页将保留。代码将编译为DLL。

        3
  •  0
  •   Feuerwehrmann    11 年前

    您将需要一个事件作为更改下拉列表。您是否使用C#或VB.net作为代码库?

    添加到onSelectedIndexChanged=“ddl_OnSelectedIndexChange”

    在代码后面添加:

    {这是C#vb类似的}

    protected void ddl_OnSelectedIndexChanged(Object sender, EventArgs e)
    {
        Session["selectedID"] = ddl.selectedValue;
    }
    

    在页面加载中,添加

    if (isPostback)
    {
        ddl.selectedValue = Session["selectedID"];
    }