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

时间:2011-08-24 13:39:13

标签: asp.net query-string rad-controls detail

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

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

我在上传页面中使用了详细信息视图,文本框和文件上传控件。

在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语句中获取错误 - “对象引用未设置为对象的实例”

5 个答案:

答案 0 :(得分:3)

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

编辑:

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我还注意到,如果guid查询没有返回结果,则调用.First()也会导致此错误。在研究问题时,还有另一个要检查的地方。

答案 3 :(得分:0)

我看到最后一个地方如果objEntities无法构造并返回空引用,那么也可能抛出此错误,那么对对象属性的任何调用都将生成此错误(即objEntitiey.Projects):

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

答案 4 :(得分:0)

正在发生此错误,因为正如另一个回答者所说,您需要将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。