对象引用未设置为对象错误的实例



我有Default。aspx和Upload.aspx。我通过查询字符串传递Id到default.aspx (like:http://localhost:3081/default.aspx?Id=1752)。在默认页面我有一个链接按钮打开上传。Aspx上传文件。当我在上传时使用Request.QueryString["Id"]。在aspx中,它显示错误为"对象引用未设置为对象的实例"。我正在处理RadControls。当我点击链接(OnClientClick="return ShowAddFeedBackForm()")时打开,我有这样的代码:

<script>
function ShowAddFeedBackForm() {
            window.radopen("Upload.aspx", "UserListDialog");
           return false;
    }
</script>

我在上传页面使用detailsview与文本框和文件上传控件。

在upload.aspx

文件上传时绑定的代码
protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
string qString = Request.QueryString["Id"].ToString();
       if (DetailsView1.CurrentMode == DetailsViewMode.Insert)
       {
           //string qString = Request.QueryString["Id"].ToString();
           //int Projectid = Convert.ToInt32(Session["ProjectId"]);
           ProTrakEntities objEntity = new ProTrakEntities();
           TextBox txtTitle = DetailsView1.FindControl("txtTask") as TextBox;
           //RadComboBox cmbStatus = DetailsView1.FindControl("cmbStatus") as RadComboBox;
           //var id = (from project in objEntity.Projects where project.ProjectId == Projectid select project).First();
           RadComboBox cmbTaskType = DetailsView1.FindControl("cmbTasktype") as RadComboBox;
           //RadComboBox cmbTaskPriorty = DetailsView1.FindControl("cmbPriority") as RadComboBox;
           string Description = (DetailsView1.FindControl("RadEditor1") as RadEditor).Content;

           var guid = (from g in objEntity.Projects where g.ProjectGuid == qString select g).First();
           int pID = Convert.ToInt32(guid.ProjectId);
           ProjectFeedback objResource = new ProjectFeedback();
           objResource.ProjectId = pID;
           objResource.Subject = txtTitle.Text;
           objResource.Body = Description;
           objResource.CreatedDate = Convert.ToDateTime(System.DateTime.Now.ToShortDateString());
           objResource.FeedbackType = cmbTaskType.SelectedItem.Text;
           objEntity.AddToProjectFeedbacks(objResource);
           objEntity.SaveChanges();
           DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
           ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind('navigateToInserted');", true);

       }
}

在querystring语句中出现错误-"Object reference not set to an instance of a Object "

打开新页面时不继承查询字符串。您必须在URL中包含id,即Upload.aspx?id=1752

编辑:

一个简单的解决方案是复制页面URL的搜索部分:

window.radopen("Upload.aspx" + document.location.search, "UserListDialog");

但是,通常您会使用从服务器端代码中的查询字符串中获取的id值,并生成客户端代码来使用它。

我不确定,但如果我不得不猜测,我会质疑窗口对象是否已经实例化的时候,你调用radopen在你的页面的脚本部分。您应该在调用window.radopen()调用之前放置一个msgbox来打印窗口对象的内容,如果它是空的,这是您的问题,否则这将需要更多的挖掘。

我还注意到,如果guid查询没有返回任何结果,那么调用. first()也会导致此错误。只是研究这个问题的另一个地方。

还有最后一个地方我看到,也可以抛出这个错误,如果objEntities未能构建并返回一个空引用,那么任何调用对象的属性将产生这个错误(即objentity . projects):

 ProTrakEntities objEntity = new ProTrakEntities();  
 var guid = (from g in objEntity.Projects where g.ProjectGuid == qString select g).First();            

出现这个错误是因为,正如另一个回答者所说,您需要将ID传递给RadWindow,因为RadWindow不知道调用它的页面的任何信息。你得到一个空引用异常,因为窗口找不到查询字符串,所以当你试图引用。tostring()时,它会抛出一个异常。

要让它工作,让你的Javascript函数像这样:
function ShowAddFeedBackForm(Id) {
    window.radopen(String.format("Upload.aspx?Id={0}", Id), "UserListDialog");
    return false;
}

在你的基本页面(即正在打开窗口的页面)的Page_Load事件后面的代码中,放置如下:

if (!IsPostBack)
    Button.OnClientClick = string.Format("javascript:return ShowAddFeedBackForm({0});", Request.QueryString["Id"]);

当然,Button应该是按钮的ID,因为它在你的页面上。

相关内容

  • 没有找到相关文章

最新更新