0

我在更新面板中有一个文件上传。

<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 属性时,它是空的。

我想在 oncange 事件 witj javascrip 中获取上传面板的 Filenme,但我没有得到文件的完整路径。

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

部分回发后如何获取文件上传的文件名?

4

1 回答 1

0

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

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

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

您可以尝试许多技巧来使用 UpdatePanels 来完成这项工作,但从长远来看,最干净的方法是使用 jQuery Ajax 来实现这一点,因为您可以完全控制提交的内容和不提交的内容以及何时提交。

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

于 2012-12-28T17:10:44.517 回答