我有Default.aspx和Upload.aspx。
我将Id通过查询字符串传递给default.aspx
(like: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语句中获取错误 - “对象引用未设置为对象的实例”
答案 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。