hidden field is null on !IsPostBack and not null on IsPostBack

天涯浪子 提交于 2019-12-11 00:51:38

问题


First I'll apologize for the unclear title of my question. I wasn't sure how to succinctly describe my problem in a title.

I have a hidden field in my .aspx

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

I want to set the value of this field during the page load event, and if it is not a postback.

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";

    }
}

The problem is that the Request doesn't contain the hidden field in the Form array during the page load event when it's not a postback (ie - the first time the page is hit). Subsequent hits to the page (ie - postbacks) result in the Form array containing the hidden field.

I'm sure that it has to do with the lifecycle of the page, but what I really need to know is how do I set the hidden field during the page load event and when it is not a postback?

EDIT: I really, really don't want to incorporate the runat="server" attribute!


回答1:


You could define a property in your page class and then modify the property value in your code:

    protected string HiddenFieldValue { get; set; }

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

Then define the hidden form field like this so that it's value is set to the property value:

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

If you only want to set the value form the property during a postback or non-postback you could add the condition as well:

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



回答2:


Try converting the input into a HiddenField control (or, at least, a runat="server" input), and reference it by it's ID, rather than through Request.Form.




回答3:


Instead of:

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

try this:

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

Then in your Page_Load()

hid1.Value = "whatever...";

It will be visible both before and after postback when you declare it in this manner.




回答4:


Why don't you make it a server control by setting 'runat="server"' on the input control? Then it will be accessible from your code behind, and you will be able to set the value during the first page load.




回答5:


why dont you access that field through a style class and use runat server=?



来源:https://stackoverflow.com/questions/1472783/hidden-field-is-null-on-ispostback-and-not-null-on-ispostback

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!