隐藏字段为空!IsPostBack并且IsPostBack上不为null

时间:2009-09-24 16:24:57

标签: asp.net request page-lifecycle hidden-field

首先,我要为我的问题标题不清楚而道歉。我不确定如何在标题中简洁地描述我的问题。

我的.aspx中有一个隐藏字段

<input type="hidden" name="hid1" value="0" />

我想在页面加载事件期间设置此字段的值,如果它不是回发。

protected void Page_Load(object sender, EventArgs e) {
    if (!Page.IsPostBack) {

        // This doesn't work!
        Request.Form["hid1"] = "1";

    }

    if (Page.IsPostBack) {

        // This DOES work!
        Request.Form["hid1"] = "1";

    }
}

问题是,当页面加载事件不是回发时(即第一次点击页面时),请求不包含Form数组中的隐藏字段。对页面的后续命中(即 - 回发)会导致Form数组包含隐藏字段。

我确信它与页面的生命周期有关,但我真正需要知道的是如何在页面加载事件期间设置隐藏字段以及何时不是回发?

修改 我真的,真的不想加入runat =“server”属性!

5 个答案:

答案 0 :(得分:4)

您可以在页面类中定义属性,然后在代码中修改属性值:

    protected string HiddenFieldValue { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
            HiddenFieldValue = "postback";
        else
            HiddenFieldValue = "not postback";
    }

然后像这样定义隐藏的表单字段,以便将其值设置为属性值:

    <input type='hidden' id='hidden1' value='<%=HiddenFieldValue %>' />

如果您只想在回发或非回发期间设置属性值,您也可以添加条件:

    <input type='hidden' id='hidden1' value='<% if(IsPostBack) { %> <%=HiddenFieldValue%> <% } %>' />

答案 1 :(得分:2)

尝试将输入转换为HiddenField控件(或者至少是runat="server" input),然后通过它的ID引用它,而不是通过Request.Form

答案 2 :(得分:2)

而不是:

<input type="hidden" name="hid1" value="0" />

试试这个:

<asp:HiddenField runat="server" ID="hid1" />

然后在Page_Load()

hid1.Value = "whatever...";

当您以这种方式声明它时,它将在回发之前和之后都可见。

答案 3 :(得分:1)

为什么不在输入控件上设置'runat =“server”'使其成为服务器控件?然后可以从后面的代码访问它,并且您将能够在第一页加载期间设置值。

答案 4 :(得分:1)

为什么不通过样式类访问该字段并使用runat server =?