Отправка значений из представления с сообщением и получение их в другом представлении

#c# #asp.net-mvc

#c# #asp.net-mvc

Вопрос:

Я начинаю с ASP.net MVC, и у меня есть два представления. Первый — ViewPost с формой, которую я хочу, чтобы при нажатии кнопки ввода информация из формы отправлялась в другое представление. Мой код выглядит так:

 <h2>ViewPost</h2>
<form method="POST" action="~/Home/NewView">
    Number<input id="id_number"type="text" name="name_number" />
    Text<input id="id_text" type="text" name="name_text" />
    <input type="submit"/>
</form>
  

В контроллере у меня есть этот код:

   [HttpPost]
        public ActionResult ViewPost(int? name_number, string name_text)
        {
            return View();
        }
  

Также в контроллере у меня есть метод GET для NewView, который проверяет значения и объединяет их, и отображает результирующую строку в ViewBag.Сообщение:

         public ActionResult NewView(int? number, String name)
        {
           String urlParam = "";
            if (number.HasValue)
            {
                urlParam  = " Value number="   number;
            }
            if (name != null)
            {
                urlParam  = " Value name="   name;
            }
            if (urlParam == "")
            {
                urlParam = "No values";
            }
            ViewBag.Message = urlParam;

            return View();
        }
  

когда я нажимаю кнопку отправки, я получаю
Resource not found. Requested URL: /Home/NewView
но при переходе по написанию URL-адреса я могу перейти без проблем

Ответ №1:

Ваша форма отправляет POST запрос:

 method="POST"
  

Но вы утверждаете, что ожидаете GET запроса:

в контроллере у меня есть метод GET для NewView

Либо измените форму на GET запрос:

 method="GET"
  

или измените действие контроллера, чтобы принять POST :

 [HttpPost]
public ActionResult NewView(int? number, String name)
{
    //...
}
  

Кроме того, имена элементов формы должны совпадать с именами переменных, которые вы хотите, чтобы они заполняли. Так что либо измените их в форме:

 name="number"
...
name="name"
  

или измените их в методе действия:

 public ActionResult NewView(int? name_number, String name_text)
  

Примечание по терминологии, которое может прояснить некоторые из них для вас…

я хочу, чтобы при нажатии кнопки ввода информация из формы отправлялась в другое представление

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

Но общее взаимодействие заключается в том, что код в браузере (ссылка, форма, JavaScript и AJAX и т. Д.) Отправляет запросы к действиям на стороне сервера, И эти действия возвращают множество ответов.

Комментарии:

1. Спасибо! Я вообще не понимал, как это работает, и я думал, что контроллер управляет отправкой и извлечением. Вы мне очень помогли