System.IO.Path.GetExtension在ASP.NET中返回null

时间:2014-04-23 11:13:42

标签: c# asp.net nullreferenceexception

我的页面中有 fileupload ,因此用户可以浏览计算机并选择文件。当我想使用此代码获取文件名时选择文件:

string ext = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);

它返回null并且我收到此错误:

Object reference not set to an instance of an object.

调试后,我发现我的文件被发布为null并且它没有发送。为什么?添加一些代码后,我收到了这个错误:

<asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Always">
        <ContentTemplate>
<div class="wrapper-box">
                                <div class="topbox">
                                    عکس خبر
                                </div>
                                 <asp:FileUpload ID="FileUpload1" runat="server" CssClass="text-input-two" />
                            </div>


        </ContentTemplate>
    </asp:UpdatePanel>

4 个答案:

答案 0 :(得分:1)

根据MSDN,如果传入的FileName为null,则GetExtension将仅返回null。

  

指定路径的扩展名(包括句点“。”)或   没有[Null]或String.Empty。如果path为Nothing [Null],则为GetExtension   什么都没有[Null]。如果路径没有扩展信息,   GetExtension返回String.Empty。

因此,在继续进行之前,先检查(文件!= null&amp;&amp; file.FileName!= null)

答案 1 :(得分:1)

获取扩展方法返回文件的扩展名。 检查以下代码示例

string s = System.IO.Path.GetExtension("file1.aspx");
你可以用 FileUpload1.fileName 而不是 fileupload1.postedfile.filename

希望有所帮助

答案 2 :(得分:0)

尝试在和

之间添加此回发触发器
</ContentTemplate>
  <Triggers>
     <asp:PostBackTrigger ControlID="Button1" />
  </Triggers>
</asp:UpdatePanel>

并在您的表单中添加enctype =“ multipart / form-data”

<form id="form1" runat="server" enctype="multipart/form-data">

答案 3 :(得分:0)

使用

string ext = System.IO.Path.GetExtension("FileName.ext");

代替

string ext = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);