【问题标题】:HTML select value does not changeHTML 选择值不变
【发布时间】:2014-12-29 20:42:05
【问题描述】:

我是 ASP.NET 和 C# 的新手,我正在尝试创建一个论坛。 我的 .aspx 文件和 HTML 按钮上有一个 HTML 选择,在 .aspx.cs 文件中,我想在按下按钮时获取该 HTML 选择值,但它总是给我“默认”值,而不是那个实际选择。

这是在我的 .aspx 文件中:

<select id="sortBySelect" runat="server">
    <option value="default">Default</option>
    <option value="username">Username</option>
    <option value="date">Data</option>
</select>

<button id="sortByButton" runat="server" onserverclick="sortBy">Sort</button>

在我的 .aspx.cs 文件中,我有这个:

public void sortBy(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine(sortBySelect.Value);
}

我也不能使用 asp dropdownlist/asp 按钮,因为它说它必须保留在带有“runat="server"”的表单标签内,但我的 .aspx 文件上已经有一个表单标签,如果我添加另一个它说我不能有 2 个带有 "runat="server"" 的表单标签。

如何获取该 HTML 选择的实际选择值?

【问题讨论】:

  • 使用
  • 嗨,亚历山德鲁。如果您是 asp.net 和 c# 的新手,尤其是如果您有任何其他 Web 编程经验,我会强烈建议您使用 asp.net mvc 框架而不是您正在使用的 webforms 框架. Mvc 具有更简单的概念,这些概念对 Web 格式更自然,并且通常提供更高质量的建议。网络表单有时很有用,但我永远不会将它用于这样的事情,也永远不会向初学者推荐它。
  • @Igor Semin 我试图将我的 HTML 选择放在一个表单标签中,但是使用 method="get" 我的函数 "sortBy" 没有被调用并且有/没有 method="post" 它改变了我的应用程序使用的 URL,因此页面呈现失败。
  • @George Mauer,我曾使用 PHP 和 Symfony2/Zend 框架,它们都是 MVC,但这是一个大学项目,我们必须使用 Web 表单。
  • @AlexandruAndrei 您不应该在 ASP.Net Web 表单中操作表单标签。

标签: c# asp.net


【解决方案1】:

在 ASP.Net Web 表单中,您需要表单标签为runat="server"。此外,您不应该操纵表单标签。

ASP.Net 控件使用 ViewState 来维护回发之间的状态信息。因此,您要使用 Server Controls,例如 DropDownList (除非您知道不需要 ViewState)

<form id="form1" runat="server">
    <asp:DropDownList ID="SortByDropDownList" 
        runat="server">
        <asp:ListItem Value="default">Default</asp:ListItem>
        <asp:ListItem Value="username">Username</asp:ListItem>
        <asp:ListItem Value="date">Data</asp:ListItem>
    </asp:DropDownList>
    <asp:Button runat="server" ID="SortByButton"
        Text="Sort"
        OnClick="SortByButton_Click" />
</form>

protected void SortByButton_Click(object sender, EventArgs e)
{
    string value = SortByDropDownList.SelectedValue;
}

【讨论】:

    【解决方案2】:

    您没有获得价值,因为“选择”不是表单的一部分,因此不会在提交时发回。您在此处用于排序的按钮应该是包含“选择”的目标表单。考虑在您的页面上只使用一个表单。

    编辑:您对表格数量的评论。 如果添加额外的表单,则需要支持逻辑来支持它,因为默认情况下 ASP.Net 只维护那些标有 runat="server" 的表单。这包括在回发之间持久化数据、没有 ASP.Net 服务器事件等。

    【讨论】:

    • 我也想过在我的页面上只有一个表单,但我应该在每个页面上都有一个登录表单,就像在普通论坛上一样。
    猜你喜欢
    • 1970-01-01
    • 2016-12-29
    • 2020-06-15
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多