我有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,因为它在你的页面上。