2

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

我的 .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";

    }
}

问题是请求在页面加载事件期间不包含表单数组中的隐藏字段,而它不是回发(即 - 第一次点击页面)。对页面的后续点击(即回发)会生成包含隐藏字段的表单数组。

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

编辑: 我真的,真的不想合并 runat="server" 属性!

4

5 回答 5

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%> <% } %>' />
于 2009-09-24T17:05:31.243 回答
2

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

于 2009-09-24T16:29:49.270 回答
2

代替:

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

试试这个:

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

然后在你的Page_Load()

hid1.Value = "whatever...";

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

于 2009-09-24T16:29:52.827 回答
1

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

于 2009-09-24T16:29:32.920 回答
1

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

于 2009-09-24T16:48:58.873 回答