Как передать два текстовых ввода в метод ActionResult - PullRequest
0 голосов
/ 18 июня 2019

Я работаю над большим проектом в течение нескольких дней. Все закончено, кроме этой части. Я пытаюсь передать 2 текстовых поля в метод моего домашнего контроллера.

Я пытался использовать "модель". и "предмет". но без удачи. это всегда проходит нуль

<p>
    @Html.ActionLink("Display", "Home", FormMethod.Post)
</p>
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div>
        Month:<input type="text" name="Month" id="MonthInput">
        Extra:<input type="text" name="Extra" id="ExtraInput"><br /><br />
        <input type="submit" value="Add" class="btn btn-default"> <br> <br>
    </div>
}

а в домашнем контроллере стоит

[HttpPost]
public ActionResult Display(String Month, String Extra)
{
        if (ModelState.IsValid)
        {
             ...
             return RedirectToAction("Index");
        }
        return view;
}

Я хочу, чтобы оно передавало любое значение, введенное в текстовые поля при нажатии кнопки «Добавить», но оно дает ноль

Ответы [ 4 ]

0 голосов
/ 19 июня 2019
namespace Your.Models
{
    public class DisplayModel
    {
        public string Month {get;set;}
        public string Extra {get;set;}
    }
}

[HttpPost]
    public ActionResult Display(DisplayModel model)
    {
        if (ModelState.IsValid)
        {
            string month = model.Month;
            string extra = model.Extra;

            return RedirectToAction("Index");
        }
        return View();
    }

@using Your.Models
@model DisplayModel

@using (Html.BeginForm("Display", "Home", new { id="displayview" }))
{
    @Html.AntiForgeryToken()
    <div>
            Month:<input type="text" name="Month" id="MonthInput">
            Extra:<input type="text" name="Extra" id="ExtraInput"><br /><br />
            <input type="submit" value="Add" class="btn btn-default">
    </div>
}
0 голосов
/ 18 июня 2019

Чтобы добавить к предыдущему ответу, я бы предложил принять форму в качестве FormCollection в контроллере, потому что форма, кажется, не привязана к модели:

    [HttpPost]
    public ActionResult Display(FormCollection collection)
    {
        if (ModelState.IsValid)
        {
            string month = collection["Month"];
            string extra = collection["Extra"];

            return RedirectToAction("Index");
        }
        return View();
    }
0 голосов
/ 19 июня 2019

попробуйте,

В представлении

@using (Html.BeginForm("Display", "Home", FormMethod.Post))
 {
    @Html.AntiForgeryToken()

    <div>
    Month:<input type="text" name="Month" id="MonthInput">
    Extra:<input type="text" name="Extra" id="ExtraInput"><br /><br />
    <input type="submit" value="Add" class="btn btn-default"> <br> <br>
    </div>
}

В контроллере,

[HttpPost]
public ActionResult Display(SomeClass someClass)
{
    if (ModelState.IsValid)
    {
         ...
         return RedirectToAction("Index");
    }
    return view;
}

Создать имя обычного класса SomeClass, имя в соответствии с вашим требованием,

public class SomeClass{
 public string Month {get;set;}
 public string Extra {get;set;}
}

атрибут name входов должен соответствовать свойствам SomeClass, он будет отображаться автоматически, затем вы можете получить доступ к значению с помощью объекта someClass

  someClass.Month and someClass.Extra  
0 голосов
/ 18 июня 2019

Чтобы правильно сопоставить параметры действия, вы должны использовать атрибут name.

@using (Html.BeginForm("Display", "Home"))
{
    @Html.AntiForgeryToken()
    <div>
            Month:<input type="text" name="Month" id="MonthInput">
            Extra:<input type="text" name="Extra" id="ExtraInput"><br /><br />
            <input type="submit" value="Add" class="btn btn-default">
    </div>
}

Совершенно не связаны, но, похоже, у вас есть 2 вложенные формы и одна из них отправляет в php стр.Это желательно?

Кроме того, удалите следующий код, потому что он не имеет никакого смысла:

<p>
    @Html.ActionLink("Display", "Home", FormMethod.Post)
</p>
...