更新面板的部分回发后,fileupload的FileName为空?

时间:2012-12-28 16:10:39

标签: javascript asp.net

我在Updatepanel中有一个FileUpload。

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
<Triggers>
    <asp:PostBackTrigger ControlID="SaveButton" />
</Triggers>
<ContentTemplate>
<cc1:TabContainer CssClass="visoft__tab_xpie7" runat="server" ID="tab" ActiveTabIndex="0" Width="100%" Font-Size="11px">
 <cc1:TabPanel runat="server" HeaderText="اطلاعات پایه" ID="TabPanel1">
     <ContentTemplate>
      <div class="row">
       <span style="width: 100px" class="rowtitle">تصویر </span>
        <asp:FileUpload ID="ImageFileUpload" runat="server"/>
        <asp:ImageButton ID="RemoveImageButton" runat="server" ImageUrl="~/images/delete.png" />
      </div>
      <div class="row">
       <span style="width: 100px" class="rowtitle">Category</span>
       <asp:DropDownList ID="CategoryDropDownList" runat="server" Width="200px" AutoPostBack="True" DataTextField="Name" DataValueField="ID" OnSelectedIndexChanged="CategoryDropDownList_SelectedIndexChanged" />
       <asp:RequiredFieldValidator ID="CategoryRFV" runat="server" ControlToValidate="CategoryDropDownList" ForeColor="Red" ValidationGroup="Save" ErrorMessage="مجموعه را انتخاب کنید." Text="*" />
      </div>
      <div class="row" style="height: 300px">
       <span style="width: 100px" class="rowtitle">توضیحات کامل</span>
       <editor:HtmlEditor Style="float: left" runat="server" Width="600px" ID="DescriptionHtmlEditor" />
       <asp:RequiredFieldValidator Text="*" ID="DescriptionRFV" runat="server" ControlToValidate="DescriptionHtmlEditor" ForeColor="Red" ValidationGroup="Save" ErrorMessage="توضیحات را وارد کنید ." />
       </div>
     </ContentTemplate>
    </cc1:TabPanel>
   </cc1:TabContainer> 
   <div class="row" style="text-align: center">
    <asp:Button ID="SaveButton" class="button" Width="100px" OnClick="SaveButton_Click" runat="server" ValidationGroup="Save" Text="ذخیره" />
   </div>
  </ContentTemplate>
  </asp:UpdatePanel>

当我在更新面板的部分回发后尝试访问FileUpload FileName属性时,它是空的。

我想在onc​​ange事件中获取uploadpanel的Filenme和javascrip,但我没有得到文件的Fullpath。

 function FileChange()
   {
    var filename = document.getElementById('<%= FileNameUpload.ClientID  %>');
    var file = document.getElementById('fileupload');
    filename.value = file.value;
   }

如何在部分回发后获取fileupload的文件名?

1 个答案:

答案 0 :(得分:0)

  

当我尝试访问FileUpload FileName属性后   updatepanel的部分回发,它是空的。

更新面板只是拦截常规表单提交并使用xmlhttp请求执行完整回发。因此,最初在input:file元素上进行的选择已在初始回发中提交,之后您将无法再阅读。为了证明我在说什么,请尝试在初始回发中阅读文件名,你会发现你将能够。

查看代码,您似乎也尝试以编程方式设置fileupload元素的值。出于安全原因,这是不可能的 - 您无法从Javascript访问用户的硬盘驱动器并决定用户应将哪个文件上传到您的网站。一旦用户选择了文件并提交了表单,选择就会消失;用户必须自己重新选择文件。

你可以尝试很多黑客来使这个工作与UpdatePanels,但从长远来看,最干净的是使用jQuery Ajax实现这一点,因为你可以完全控制提交的内容和不提交的内容。

我希望这有助于澄清为什么你的方法不起作用。