@ Html.BeginForm не перенаправляет на назначенное ActionName

@using (Html.BeginForm("SerialNumber", "Test", FormMethod.Get))
   {
                    <div class = "form-group">
                        <label class = "control-label col-md-8 col-sm-3 col-xs-12" for = "color-name">
                            Serial Number <span class = "required">*</span>
                        </label>
                        <div class = "col-md-4 col-sm-6 col-xs-12 input-group">
                            @Html.TextBox("serial_number", null, new { @id = "txtSearch", @class = "form-control col-md-7 col-xs-12", type = "text", required = "required" })
                            <span class = "btn btn-default input-group-addon">
                                <span class = "glyphicon glyphicon-barcode"></span>
                            </span>
                        </div>
                        <input type = "submit" value = "Search" class = "btn btn-primary" />
                    </div>
 }

Я пытаюсь передать значение TextBox "serial_number" в ActionResult "SerialNumber" контроллера тестирования. Но значение передается только в ActionResult «AddSerialNumber» контроллера тестирования. Я старался изо всех сил, но не нашел решения. Пожалуйста помоги.

См. Снимок экрана приложения.

    public ActionResult AddSerialNumber()
    {
        return View(db.sales.ToList()); 
    }

    [HttpGet]
    public ActionResult SerialNumber(int serial_number)
    {
         ...
         return View();
    }

Я предполагаю, что вы украсили SerialNumber атрибутом [HttpPost]

Izzy 11.04.2018 16:44

У вас на рутеКарта есть что-то странное?

Jordi Jordi 11.04.2018 16:50

Есть ли другой код (...) в ActionResult SerialNumber?

RickL 11.04.2018 16:51

В вашей форме есть FormMethod.Get? !!

Wheels73 11.04.2018 16:52

Да, есть другой код для добавления данных из этого serial_number. @RickL

Anup Shrestha 11.04.2018 16:56

Хорошо, но я искал что-то, что могло бы перенаправить на AddSerialNumber, например if (! ModelState.IsValid)

RickL 11.04.2018 16:59

Да, его FormMethod.Get. Я тоже пробовал метод Post, но он не работал. Но из метода Get, если я изменяю AddSerialNumber на SerialNumber в URL-адресе, остальная часть кода работает правильно, получая этот serial_number из TextBox. @ Wheels73

Anup Shrestha 11.04.2018 17:00

@AnupShrestha - Прежде всего, я бы рекомендовал использовать строго типизированную модель для вашего представления. Затем я бы также использовал Html.TextBoxFor для привязки значений, введенных к модели. Измените метод формы на Post, измените подпись метода вашего контроллера, чтобы принять модель, затем украсьте метод HttpPost, и все должно быть хорошо

Wheels73 11.04.2018 17:13

Нет ничего, что могло бы перенаправить на AddSerialNumber. Есть код для добавления данных в таблицу, получая SerialNumber из TextBox. Код работает нормально, если я заменяю AddSerialNumber на SerialNumber в URL-адресе вручную после передачи значения в TextField. @RickL

Anup Shrestha 11.04.2018 17:14

@Anup Shrestha - эта форма вложена в другую форму, которая переходит в AddSerialNumber?

RickL 11.04.2018 17:18

@RickL НЕТ, есть только одна форма. Эта форма находится в представлении AddSerialNumber.

Anup Shrestha 11.04.2018 17:23

@RickL Спасибо, сэр. Я обнаружил ошибку. Вы были правы, я использовал html.BeginForm внутри HTML-формы. Большое спасибо. :)

Anup Shrestha 11.04.2018 17:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
12
570
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

[HttpGet]
public ActionResult SerialNumber(string serial_number)
{
     ...
     return View();
}

Вы должны использовать строковую переменную для получения значения текстового поля.

Спасибо за ответ, но здесь дело обстоит не так.

Anup Shrestha 11.04.2018 17:09

Я думаю, с HttpGet вы не можете отправлять данные в действие контроллера.

user9405863 11.04.2018 17:20
Ответ принят как подходящий

Попробуйте опубликовать данные с помощью formmethod POST и с аннотацией POST для метода controller action.

и укажите идентификатор как serial_number для текстового поля, которое вы указали как txtSearch

@using (Html.BeginForm("SerialNumber", "Test", FormMethod.POST))
       {
                        <div class = "form-group">
                            <label class = "control-label col-md-8 col-sm-3 col-xs-12" for = "color-name">
                                Serial Number <span class = "required">*</span>
                            </label>
                            <div class = "col-md-4 col-sm-6 col-xs-12 input-group">
                                @Html.TextBox("serial_number", null, new { @id = "serial_number", @class = "form-control col-md-7 col-xs-12", type = "text", required = "required" })
                                <span class = "btn btn-default input-group-addon">
                                    <span class = "glyphicon glyphicon-barcode"></span>
                                </span>
                            </div>
                            <input type = "submit" value = "Search" class = "btn btn-primary" />
                        </div>
     }
 [HttpPost]
    public ActionResult SerialNumber(string serial_number)
    {
         ...
         return View();
    }

попробуйте следующий подход.

Создайте свою модель представления и, возможно, класс для удержания продаж.

public class ViewModel
{
    public List<Sale> Sales { get; set; }
    public string SerialNumber { get; set; }
}

public class Sale
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
}

затем в вашем контроллере выполните следующие действия.

  [HttpGet]
  public ActionResult AddSerialNumber()
  {
      var myModel = new ViewModel();
      myModel.Sales = db.sales.ToList();

      return View(myModel);
  }

  [HttpPost]
  public ActionResult SerialNumber(ViewModel modelPosted)
  {
        //Do stuf with model
        return View();
  }

Затем создайте свое представление из модели и измените его на директиву Post.

@model ViewModel
@using (Html.BeginForm("SerialNumber", "Test", FormMethod.Post))
        {
            <div class = "form-group">
                <label class = "control-label col-md-8 col-sm-3 col-xs-12" for = "color-name">
                    Serial Number <span class = "required">*</span>
                </label>
                <div class = "col-md-4 col-sm-6 col-xs-12 input-group">
                    @Html.TextBoxFor(x=> x.SerialNumber, new { @class = "form-control col-md-7 col-xs-12", required = "required" })
                    <span class = "btn btn-default input-group-addon">
                        <span class = "glyphicon glyphicon-barcode"></span>
                    </span>
                </div>
                <input type = "submit" value = "Search" class = "btn btn-primary" />
            </div>
        }

Затем это будет опубликовано на вашем контроллере. У меня была простая локальная настройка, и она работает.

Надеюсь, это поможет.

Пс. должен идти .. так что удачи

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