2015-05-07 3 views
0

У меня есть простая веб-форма asp.net, после публикации ее на другой странице коллекция request.form кажется пустой. Я не уверен, что я делаю неправильно.request.form elements is null

Форма:

<form runat="server" id="myform" action="submitForm.aspx" method="post"> 
    <input type="text" class="form-control col-xs-6" name="myName"/> 
    <button type="submit" class="btn btn-default" id="submitbtn">Submit</button> 
</form> 

На моей submitForm.aspx загрузки страницы, у меня есть:

Response.Write(Request.Form["myName"].ToString()); 

Это просто создает нулевое ссылочное исключение.

У меня нет элемента сервера runat в моих текстовых окнах, и я не хочу их. Хотя в Инструментах разработчика Google я вижу, что myName отправлено с правильным значением. Есть идеи?

+0

Для 'Request.Form [" "]' для работы вашего контроля должен быть элемент управления на стороне сервера, поэтому на вашем элементе должен быть атрибут 'runat =" server. –

+0

Я не уверен, что это дело..допустимо .. добавил runat = "server", и он все еще не работал. – cableload

+0

Попробуйте 'Request.Form (« myName »)' –

ответ

0

Как уже упоминалось, ваш контроль должен быть контролем на стороне сервера, если вы хотите получить значение с помощью объекта HttpRequest, поэтому прежде всего вам нужно добавить тег runat="server".

Во-вторых, поскольку теперь управление сервером на стороне сервера, ASP.NET использует соглашение об именах для элементов управления на стороне сервера, которое изменит ваш атрибут name (вы можете проверить это, проверив источник страницы). Чтобы правильно присвоить атрибут name, вам необходимо указать атрибут id вашего элемента управления, который автоматически добавит вам атрибут name.

<input type="text" class="form-control col-xs-6" id="myName" runat="server" /> 

Будет оказана как: -

<input name="myName" type="text" id="myName" class="form-control col-xs-6" /> 

Теперь, ваш код будет работать, как ожидалось: -

Request.Form["myName"] 

Edit:

Поскольку вы используете мастер страница, ASP.NET не только модифицирует id, но и атрибут name. Если вы используете ASP.NET 4 вы можете использовать clientidmode сделать id статические: -

<input type="text" class="form-control col-xs-6" id="myName" runat="server" 
clientidmode="Static" /> 

Но все же это не возможно изменить атрибут name так что вам нужно сделать, что Javascript что-то вроде этого: -

$(function() { 
     $("#myName").attr("name", "myName"); 
}); 

После этого он должен работать на вас.

+0

У меня такой же код, как вы упомянули. По какой-то причине я все еще получаю исключение для исключения ссылок. Я использую главную страницу, чтобы атрибут name был переименован. Я использую переименованную версию на другой странице, но она все еще не работает. Это сводит меня с ума. – cableload

+0

Я просто собираюсь использовать код для захвата значений. (Запрос.Форма отлично работает, а без runat = «сервер»). Я обработаю код позади, а затем перенаправляюсь на вторую страницу. ! Я все еще не уверен, почему он не работает при публикации на другой странице. – cableload

+0

@cableload - Получил! Проверьте мое обновление. –