При отправке формы ASP.NET она выдает ссылку на объект, не установленную для экземпляра объекта.

У меня есть простая форма электронной почты, написанная на ASP.NET с логикой в ​​файле codebehind. Это все в C# (логика, которая...). В любом случае, на странице загрузки у меня есть следующее:

protected void Page_Load(object sender, EventArgs e)
{
    RequestorName.Text = Request.Form["UserName"].ToString();
    RequestorTitle.Text = Request.Form["JobTitle"].ToString();
    RequestorEmail.Text = Request.Form["Email"].ToString();
    RequestorPhone.Text = Request.Form["Phone"].ToString();
    RequestorAddress1.Text = Request.Form["Address"].ToString();
    RequestorAddress2.Text = Request.Form["City"].ToString() + " " + Request.Form["State"].ToString() + ", " + Request.Form["Zip"].ToString();

}

Это прекрасно работает, так как собирает информацию о пользователях в несколько полей, поэтому им не нужно заполнять все вручную.

Мои другие 2 метода в коде позади:

protected void SubmitForm_Click(object sender, EventArgs e)
{
    SendEmail();
}

protected void SendEmail()
{
    try
    {
        //compose email and send

    }
    catch (Exception ex)
    {
        ErrorMessage.Text = "Error: " + ex.ToString();

    }
}

На моей странице формы код кнопки такой:

<center>
                <asp:Button runat="server" Text="Submit" ID="Submit" OnClick="SubmitForm_Click" class="button red" />
</center>

Ошибка возникает, когда я нажимаю кнопку отправки в форме, которая генерирует электронное письмо и отправляет его. Я могу удалить код Page_Load и отлично работает, но я бы хотел оставить его там, чтобы пользователю не приходилось заполнять столько информации.

Я использовал свой Google Fu и прочитал кучу тем / статей, но не могу найти решение...

Спасибо за любую помощь.

3 ответа

Решение

Добавить проверку для IsPostBack:

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack) 
  {
    RequestorName.Text = Request.Form["UserName"].ToString();
    RequestorTitle.Text = Request.Form["JobTitle"].ToString();
    RequestorEmail.Text = Request.Form["Email"].ToString();
    RequestorPhone.Text = Request.Form["Phone"].ToString();
    RequestorAddress1.Text = Request.Form["Address"].ToString();
    RequestorAddress2.Text = Request.Form["City"].ToString() + " " +    Request.Form["State"].ToString() + ", " + Request.Form["Zip"].ToString();
  }

}

Вы пытались добавить if (Page.IsPostBack == false) на ваше мероприятие Page_Load?

Я предполагаю, что Request.Form Код поступает из полей, которые пользователь заполнил, но, не видя остальной части вашей разметки, я не уверен, почему вам придется переназначать значения из формы в другие поля формы.

Где конкретно происходит ошибка? Исходя из вашего кода, я предполагаю, что вы отправляете в форму электронной почты с другой страницы и передаете параметры.

Если это так, тогда предположим, что ваш.Text является элементом управления страницы, поэтому вы должны посмотреть, содержится ли заполнитель элемента управления в If(!IsPostback) {...} только для первой загрузки страницы. Тогда ваш код электронной почты можно прочитать из местного управления.

Я предполагаю, что элементы "Request.Form[...", вероятно, являются теми, кто возвращает ошибку при обратной передаче.

HTH Дейв

Другие вопросы по тегам