设置标签总是落后一步

时间:2014-04-14 18:50:26

标签: asp.net postback

我有以下代码。我想在文件大的时候显示一条消息。我的问题是只有当我按两次提交按钮时才会显示该消息。它总是落后一步。我该如何解决这个问题?

我正在做的是在文件很大时保存一个视图状态,当页面加载时,将标签的可见性设置为true或false,具体取决于文件大小。

我猜测负载发生在我的检查之前,那么我可以使用另一种方法代替Page_Load,还是可以做其他方法让它起作用?

<asp:UpdatePanel ID="updatePanel" runat="server">
    <ContentTemplate>
        <div>
            <div class="balClear">
                <asp:FileUpload ID="uploader" CssClass="balUploader" runat="server"/>
                <asp:ImageButton ID="uploaderEraser" CssClass="balUploaderCleaner" OnClick="uploaderEraser_Click" runat="server" Width="25" Height="25" />
            </div>
            <div style="clear:both">
                <asp:Label ID="fileSizeError" runat="server" ForeColor="Red">The file you are trying to upload is too big. The maximul file size is 2MB.</asp:Label>
            </div>
        </div>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="uploaderEraser" EventName="Click" />
    </Triggers>

</asp:UpdatePanel>

<asp:Button ID="submit" runat="server" Text="Submit" OnClick="submit_Click" />

cs code:

 string groupURL = "~/Uploads/Group/";
    string privateURL = "~/Uploads/Private/";

    int maximumMB = 2;

    string folderURL
    {
        get { return IsGroup == true ? groupURL : privateURL; } 
    }

    public bool IsGroup
    {
        get { return ViewState["balUploader_IsGroup"] == null ? false : (bool)ViewState["balUploader_IsGroup"]; }
        set { ViewState["balUploader_IsGroup"] = value; }
    }

    bool FileTooBig
    {
        get { return ViewState["balUploader_FileTooBig"] == null ? false : (bool)ViewState["balUploader_FileTooBig"]; }
        set { ViewState["balUploader_FileTooBig"] = value; }
    }

protected void Page_Load(object sender, EventArgs e)
    {
        if (FileTooBig == true)
        {
            fileSizeError.Visible = true; 
        }
        else
        {
            fileSizeError.Visible = false; 
        }
    }

 public void StoreFile()
    {
        if (uploader.HasFile)
        {
            if (uploader.FileBytes.Length / 1024 / 1024 < maximumMB)
            {
                FileTooBig = false;
                string fileName = Path.GetFileName(uploader.FileName);
                uploader.SaveAs(Server.MapPath(folderURL) + fileName);
            }
            else
            {
                FileTooBig = true;
            }
        }
        else
        {
            FileTooBig = false;
        }
    }


    protected void submit_Click(object sender, EventArgs e)
    {
        StoreFile();
    }

1 个答案:

答案 0 :(得分:1)

基本上,正在发生的事情是在submit_Click之后发生了Page_Load事件。这是由于ASP.NET页面生命周期。

事件的基本顺序如下:

1 - Init
2 - Load  (Page_Load is fired)
3 - Control Events (submit_Click is fired)
4 - Load Complete
5 - Pre_Render
6 - Render

这里有两个选择。

1 - 使用LoadComplete处理程序:

 protected override void OnLoadComplete(EventArgs e)
 {
     base.OnLoadComplete(e);
     //Label Logic here
 }

2 - 使用OnPreRender:

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    //Label Logic here
}