Ссылка на объект не установлена ​​на экземпляр ошибки объекта - PullRequest
1 голос
/ 24 августа 2011

У меня есть Default.aspx и Upload.aspx. Я передаю идентификатор через строку запроса на default.aspx (like:http://localhost:3081/default.aspx?Id=1752). На странице по умолчанию у меня есть кнопка ссылки, чтобы открыть upload.aspx для загрузки файла. Когда я использую Request.QueryString["Id"] в upload.aspx, это ошибка showiing как «Ссылка на объект не установлена ​​на экземпляр объекта». Я имею дело с 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 ]

3 голосов
/ 24 августа 2011

Строка запроса не наследуется при открытии новой страницы.Вы должны включить идентификатор в URL, то есть Upload.aspx?id=1752.

Редактировать:

Простым решением было бы просто скопировать поисковую часть URL страницы:

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

Однако обычно вы используете значение идентификатора, которое вы взяли из строки запроса в коде на стороне сервера, и генерируете код клиента для его использования.

0 голосов
/ 24 августа 2011

Эта ошибка возникает, потому что, как сказал другой ответчик, вам нужно передать идентификатор в 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 должен быть идентификатором кнопки, как она есть на вашей странице.

0 голосов
/ 24 августа 2011

Есть еще одно последнее место, которое я вижу, которое также может выдать эту ошибку, если objEntities не удалось создать и вернул нулевую ссылку, тогда любой вызов свойств объекта сгенерирует эту ошибку (т.е. objEntitiey.Projects):

 ProTrakEntities objEntity = new ProTrakEntities();  
 var guid = (from g in objEntity.Projects where g.ProjectGuid == qString select g).First();            
0 голосов
/ 24 августа 2011

Я также заметил, что если запрос guid не возвращает результатов, вызов .First () также вызовет эту ошибку. Просто еще одно место, чтобы проверить при исследовании проблемы.

0 голосов
/ 24 августа 2011

Я не уверен, но если бы мне пришлось угадывать, я бы задал вопрос, был ли создан экземпляр объекта Window во время вызова Radopen в разделе сценариев на вашей странице.Вы должны поставить msgbox перед вызовом window.radopen (), чтобы напечатать содержимое объекта окна, если оно пустое, что является вашей проблемой, иначе это потребует больше копания.Просто мои два цента.

...