发生异步回发时,TextBox 的文本 属性 为空

Text property of a TextBox is empty when an async PostBack occurs

我看了很多帖子,我觉得自己快要疯了,因为我尝试过的任何东西似乎都不起作用。我只想单击一个按钮并检索文本框的值。

我正在使用带有 site.master 的网络表单,所以不确定这是否会影响问题,但我看到的大多数解决方案似乎都没有使用 site.master.

我没有绑定文本框,最初我只是想创建一个联系表单。

<%@ Page Title="About" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="Blackburn_Pulse.About" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <script>$("#menuAbout").addClass("navi-active");</script>

    <div class="contentBody">
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:TextBox ID="tb_Test" EnableViewState="true" CausesValidation="false" runat="server"></asp:TextBox>
                <asp:LinkButton ID="btn_Test" runat="server" OnClick="btn_Test_Click" Text="send test" />
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="btn_Test" EventName="click" />
            </Triggers>
        </asp:UpdatePanel>
    </div>
</asp:Content>
public partial class About : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.Page.Master.EnableViewState = true;

        if (IsPostBack)
        {
            var test_var = tb_Test.Text; //returning empty
        }
    }

    protected void btn_Test_Click(object sender, EventArgs e)
    {
        var test_var = tb_Test.Text; //returning empty
    }
}

更新: site.master.cs

    public partial class SiteMaster : MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindCategories();
        }
    }

    protected void BindCategories()
    {
        Categories Categories = new Categories();
        rpt_categories.DataSource = Categories.Get_Categories();
        rpt_categories.DataBind();
    }

    protected void lb_newsCat_Command1(object sender, CommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "naviTo":
                //Redirect user to selected category
                Response.Redirect("~/" + e.CommandArgument.ToString());
                break;
        }
    }
}

我正在将 PHP 网站转换为 ASP.net 网站。结果我在搜索框上还有另一个 HTML 表单标签,我还没有开始处理它。

不幸的是,如果您有另一个表单标签,调试器不会抛出错误,所以任何刚刚花费数小时搜索的人,请仔细检查您没有超过 1 个表单标签!

在我的 site.master.aspx 文件中,我有一个搜索框如下:

<form method="post" action="?">
    <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
    <button class="btn btn-outline-primary my-2 my-sm-0" type="submit">Search</button>
</form>

一旦我取出额外的表单标签,一切正常。