【问题标题】:dropdownlist is not posting the data in code behind while selection of value选择值时,下拉列表未在代码后面发布数据
【发布时间】:2021-02-18 15:42:03
【问题描述】:

我的 asp 页面中有下拉菜单,当我尝试选择值时,无法在后面的代码中获取值。

这是我的下拉列表代码:

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">   
<div class="row" >
              <asp:Label ID="LblLanguage" runat="server" Text="Label" meta:resourceKey="LblLanguage">Language</asp:Label>
             <asp:DropDownList ID="Language1" runat="server" AutoPostBack="true">
                <asp:ListItem Value="auto">Select</asp:ListItem>
                <asp:ListItem Value="en-US">English (US)</asp:ListItem>
               <asp:ListItem Value="fr">French</asp:ListItem>
             </asp:DropDownList>
            </div>
</asp:Content>

当我尝试从下拉列表中选择法语时,代码后面没有值。这是我的代码后面

protected override void InitializeCulture()
    {

        string lang = Request["Language1"];
        
            if (lang != null && lang != string.Empty)
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
        }
    }

所以即使我从下拉列表中选择了一个值,这里的字符串 lang 也有 null。

【问题讨论】:

  • 但是如果 autopostbackk = true,那么触发的代码中的事件是 SelectedIndexChanged。我不明白你为什么使用 InitializeCulture?除非回发已触发,否则只有在回发发生后,您才能获取/获取下拉列表的值。您没有解释何时/何地/如何运行此附加代码存根以及何时运行? InitializeCulture 预计何时运行?
  • @Albert D. Kallal InitializeCulture 将更改表单的语言。当页面初始化时,肯定需要初始化下拉菜单。借助选择我们可以更改语言?
  • @NCCSBIM071 - 上次我使用你的解决方案,它在我的新应用程序中工作。我在现有表单中使用相同的解决方案。从下拉列表中选择值时存在一些问题。你能帮帮我?

标签: c# asp.net drop-down-menu


【解决方案1】:

您正试图以旧的 ASP 经典方式引用下拉语言 1。要获取下拉列表的值,请将其引用为 Language1.SelectedValue。

string lang = Request["Language1"];

应该是

string lang = Language1.SelectedValue;

【讨论】:

  • 我已经尝试过 SelectedValue,但是当您加载页面时它会出错,因为当时没有选择任何值。所以我的代码正在初始化字符串“lang”的值。
  • 如果我用你的行替换我的代码,那么它会给出错误“System.NullReferenceException: 'Object reference not set to an instance of an object.'”
  • 从哪里调用 InitializeCulture?如果在页面上的任何控件被赋予值之前从 PageLoad 调用它,则 SelectedValue 将为空。 InitializeCulture 的行为必须考虑到您是在初始页面加载(IsPostBack 为假)还是回发(IsPostBack 为真)。在初始页面加载时,您需要从会话变量或其他一些持久存储机制中获取文化值。
  • 在页面加载之前自动初始化文化,因为它是在 page_load 之前编写的。因此它会相应地初始化语言和 conert 的值。实际上下拉菜单在内容占位符内。如果我使用普通的 asp.net 网络表单,那么这个代码在那里工作,但在这里它没有在后面的代码中发布选定的值
  • 我认为 Vim 这里存在语言障碍。我很难理解你写的东西。也许说您的语言的人可能对您更有帮助。我认为您的意思是在页面加载并将语言选择更改为“法语”后,InitializeCulture 例程将 Language1 的 SelectedValue 属性视为 null。这可能是因为在调用 InitilizeCulture 之前触发的其他代码正在通过重新绑定控件或其他方式清除所选值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多