使用UpdatePanel时未设置错误对象引用

时间:2014-01-14 14:54:22

标签: c# asp.net ajax asp.net-ajax

我有这个错误“对象引用未设置 ....”,我检查了我的 代码,我得到了 UpdatePanel 中的错误,当我删除它时 代码运行良好,但我必须使用它来防止所有页面重新加载。

<div>
   <fieldset style="width: 498px; text-align: right; padding: 5px; direction: rtl;">
       <legend>what do y think ? </legend>
       <div class="add-post">
           <textarea class="textarea" cols="3" rows="3" runat="server" id="txpost"></textarea>
           <asp:RequiredFieldValidator ID="RVAddPost" runat="server" ForeColor="Red" ErrorMessage="*"
               ControlToValidate="txpost" ValidationGroup="AddUserPost">*</asp:RequiredFieldValidator>
       </div>
       <asp:UpdatePanel ID="UPAddUserPost" runat="server">
           <ContentTemplate>
               <div class="add-post-control">
                   <div class="post">
                       <asp:Button Text="Submit" runat="server" ID="btAddPost" OnClick="btAddPost_Click" ValidationGroup="AddUserPost" />
                   </div>
                   <div class="fileUpload btn btn-primary">
                       <div class="fileUpload btn btn-primary">
                           <span>
                               <img src="res/images/img.png" width="38" height="27" /></span>
                           <input type="file" runat="server" class="upload" id="FUFile" />
                       </div>
                   </div>
               </div>
           </ContentTemplate>
           <Triggers>
               <asp:AsyncPostBackTrigger ControlID="btAddPost" EventName="Click" />
           </Triggers>
       </asp:UpdatePanel>
   </fieldset>
   <script type="text/javascript">
       $('.textarea').focus(function () {
           $(this).animate({
               height: "80px"
           }, 500);
           $('.add-post-control').fadeIn(200);
       });
   </script>
</div>

方法:

protected void btAddPost_Click(object sender, EventArgs e)
{

    AddpostfromFront();
}
private void AddpostfromFront()
{
    if (FUFile.PostedFile.ContentLength != 0)
    {
        string tempVar = "~/res/Posts/" + FUFile.Value.ToString();
        FUFile.PostedFile.SaveAs(Server.MapPath(tempVar));
        ftier.Addpostfromfront(LoggedUserID, "4", txpost.Value, tempVar, DateTime.Now, DateTime.Now, false, false);
    }
}

1 个答案:

答案 0 :(得分:1)

我认为你需要做的不是检查文件的长度,而是使用内置于PostedFile的方法来检查是否有文件开头。

如果您查看Microsoft page for PostedFile,您的代码看起来会更像

Private void AddpostfromFront()  //I don't like your naming on this, should be AddPostFromFront
{
    if (FUFile.HasFile)
    {
        string tempVar = "~/res/Posts/" + FUFile.Value.ToString();
        FUFile.SaveAs(tempVar);
    }
}

要使用这些方法,您可能必须使用ASP控件而不是HTML标记,<asp:FileUpload></asp:FileUpload>您必须调整属性以适合您的情况和命名方案。这将替换您的HTML代码<input type="file" runat="server" class="upload" id="FUFile" />

我认为您将两个进程合并为一个,并对您的代码应该做什么感到困惑。


不知道ftier是什么以及为什么它具有相同的方法名称和相同的错误命名方案,或者它对该信息的处理方式。


你应该分3步完成这个步骤

  1. 上传文件
  2. 保存文件
  3. 如果您需要显示该文件,请使用保存的文件,而不是正在上传的文件。