[asp.net]从服务器代码刷新updatepanel的问题

时间:2011-04-20 12:22:18

标签: asp.net updatepanel

在我的应用程序中,我有一个简单的上传,其中包含jquery和自定义http处理程序绑定到按钮和更新面板以显示上传的文件名:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:Button ID="btnUploadFile" runat="server" Text="Button" />
    <%= System.DateTime.Now %>
    <input id="File1" type="file" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
        <ContentTemplate>
            <br />
            <br />
            <%= System.DateTime.Now %>
            <asp:Label ID="Label1" runat="server" Text="" ViewStateMode="Disabled"></asp:Label>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

$(document).ready(function ()
{
    $(function ()
    {
        $('#file_upload').fileUpload({
            url: '../UploadHandler.ashx',
            method: 'POST',
            onLoadAll: function (list)
            {
               // __doPostBack('MainContent_UpdatePanel1', '');
            }
        });
    });

    $('#File1').hide();

    $('#MainContent_btnUploadFile').click(function ()
    {
        $('#File1').click();

        return false;
    });
});

处理程序看起来:

public void ProcessRequest(HttpContext context)
        {
            HttpPostedFile uploadedfile = context.Request.Files[0];

            string fileName = uploadedfile.FileName;

            IMainFormViewPresenter presenter = Bootstrapper.ServiceLocator.GetService<IMainFormViewPresenter>();
            //do sth..
            presenter.SetFileInfo(fileName);
            presenter.RefreshUpdatePanel();
        }

并在视图中

public void RefreshUpdatePanel()
        {
           // UpdatePanel1.Update();
        }
public void SetFileInfo(string fileName)
        {
            Label1.Text = fileName;
        }

问题是,服务器代码中的UpdatePanel1.Update()不起作用。有时我会遇到异常:Update方法只能在Render之前在ID为“UpdatePanel1”的UpdatePanel上调用。

我无法知道发生了什么。更新面板从javascript工作正常刷新,但我很好奇为什么在服务器上有问题。 我放在https://dl-web.dropbox.com/get/Public/WebApplication1.rar?w=ea9959b6

的完整解决方案

1 个答案:

答案 0 :(得分:0)

由于该按钮位于更新面板之外,因此您需要在更新面板中添加一个触发器,该触发器具有您的按钮的controlID以及单击事件,因此在更新面板中添加以下内容:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
    <ContentTemplate>
        <br />
        <br />
        <%= System.DateTime.Now %>
        <asp:Label ID="Label1" runat="server" Text="" ViewStateMode="Disabled"></asp:Label>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnUploadFile" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

这将告诉您的更新面板将按钮视为更新面板内部并参与部分回发,就好像它位于更新面板内一样。

HTH。