При отправке формы 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 Дейв