• ASP.NET AJAX UpdatePanl和FileUpload控件不兼容


     

    FileUpload放在UpdatePanl中不好使,在网上找到两种方法,经测试,第二种可以使用!第一种没试,呵!

    方法一:

    曾在开发ATLAS时候,想用UpdatePanel (UP)来上传文件,但是没有想到FileUpload (FU)控件不能在UP里使用,这里有个小技巧,可以让你的FU控件在UP里面起做用. 来看代码:

    HTML:     

    <div>
             
    <atlas:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
             
    </atlas:ScriptManager>
             
    <atlas:UpdatePanel ID="UpdatePanel1" runat="server">
                 
    <ContentTemplate>
                     
    <asp:FileUpload ID="FileUpload1" runat="server" /><asp:Button ID="cmdButton1" runat="server"
                         Text
    ="Upload" /><asp:Label ID="Label1" runat="server" Text=""></asp:Label>
                 
    </ContentTemplate>
             
    </atlas:UpdatePanel>
       
             
    <asp:Button ID="cmdButton2" OnClick="cmdButton2_click"   runat="server" Text="Full post back" /> 
             
    </div>


    CODE BEHIND:

    Protected Sub Page_Load()Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load

             
    Me.cmdButton1.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(Me.cmdButton2, ""))

         
    End Sub

         
    Protected Sub cmdButton2_Click()Sub cmdButton2_Click(ByVal sender As ObjectByVal e As System.EventArgs)
             
    If Me.FileUpload1.HasFile Then
                 System.Threading.Thread.Sleep(
    1000)
                 
    Me.Label1.Text = Me.FileUpload1.FileName
             
    End If
         
    End Sub



    这样的话,当你在点击UP里面的UPLOAD按钮时,整个页面就会回传,当然你的可以找到你FU控件里面的文件,所以上传文件是没问题. OK~

    后来考虑到界面问题,想把button2按钮给隐藏掉,然后设置button2的visible的属性为false.运行是却出现了如下的错误:
    回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
    把button2的visible的属性重新该为true,问题就不在重新出现,现在对此不能理解
    麻烦知道的朋友告诉一声.谢谢!!!

    方法二:

    发现把FileUpload控件放到ASP.NET AJAX UpdatePanl中,事件倒是能捕捉到,但FileUpload在后台的HasFile老是为False,也就是说文件根本没传到服务端,用Google查了查,发现ASP.NET AJAX官方文档已经说明了FileUpload和AJAX不兼容!

    办法的:

    protected void DatePicker1_SelectionChanged(object sender, EventArgs e)
    {
        Label1.Text 
    = DatePicker1.DateValue.ToShortDateString();
    }

    protected void Button1_Click(object sender, EventArgs e)
    {       
         
    if (FileUpload1.HasFile)
        {
             Label1.Text 
    = FileUpload1.FileName;
        }
    }

    It is at this point that we experience the problem. Run the form and you will find that the file upload control does not work. Because the file upload control is within an update panel the file is not posted to the server.

    3. Enable File Upload Full Postback

    As mentioned earlier the trick is to force the file upload control to perform a full postback, and we do this using triggers. Triggers allow the developer to specify what will cause partial and full postbacks. They must be defined within the UpdatePanel but outside of the ContentTemplate. We want to create a trigger that will instruct the button that we are using for the upload to perform a full postback. The updated markup is:

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="conditional">

    <Triggers>

    <asp:PostBackTrigger ControlID="Button1" />

    </Triggers>

    <ContentTemplate>

    <ews:DatePicker ID="DatePicker1" runat="server" UsingUpdatePanel="True" OnSelectionChanged="DatePicker1_SelectionChanged" /><br />

    <asp:Label ID="Label1" runat="server"></asp:Label><br /><br />

    <asp:FileUpload ID="FileUpload1" runat="server" />

    <asp:Button ID="Button1" runat="server"

    Text
    ="Upload" OnClick="Button1_Click" />

    </ContentTemplate>

    </asp:UpdatePanel>


  • 相关阅读:
    jsp四个域对象
    java,qq邮箱发邮件工具类(需要部分修改)
    Java使用qq邮箱发邮件实现
    JavaScript 高级
    JavaScript基础
    JQuery 高级
    JQuery 基础
    团队最后一次作业:总结
    C++多态
    结对编程
  • 原文地址:https://www.cnblogs.com/lavenderzh/p/1369769.html
Copyright © 2020-2023  润新知