1

我有 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);


       }

}

在查询字符串语句中出现错误-“对象引用未设置为对象的实例”

4

5 回答 5

3

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

编辑:

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

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

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

于 2011-08-24T13:49:05.847 回答
0

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

于 2011-08-24T13:49:28.373 回答
0

如果 objEntities 构造失败并返回空引用,我看到最后一个地方也可能引发此错误,然后对对象属性的任何调用都会生成此错误(即 objEntitiey.Projects):

 ProTrakEntities objEntity = new ProTrakEntities();  
 var guid = (from g in objEntity.Projects where g.ProjectGuid == qString select g).First();            
于 2011-08-24T13:59:41.460 回答
0

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

于 2011-08-24T13:55:46.190 回答
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,因为它在您的页面上。

于 2011-08-24T14:04:55.023 回答