Отправка ввода идентификатора из действия отправки в контроллер - PullRequest
0 голосов
/ 30 мая 2019

У меня есть представление, которое мне нужно, чтобы принять пользовательский ввод и отправить его в действие контроллера. Я пробовал несколько вещей, но какие ссылки я нашел в Интернете, похоже, не работает для меня. У меня есть входные данные в форме, и у меня есть имя контроллера и действия, но оно, похоже, не передает значение из пользовательского ввода. На самом деле, если я жестко не закодировал значение в параметрах контроллеров, когда я попадаю на страницу, я просто получаю сообщение об ошибке:

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Index(Int32)' in 'Namespace.Controllers.TerminalReceiptsController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.

Имя параметра: параметры

В противном случае, когда жестко запрограммирован в параметрах контроллера, он работает просто отлично.

Ниже приведен код.

Просмотр части импорта:

@using (Html.BeginForm("Index", "TerminalReceipts"))
 {

  <div>
    <input type="text" name="ID" />
     <input type="submit" value="Find Receipts">
  </div>

   string Id = Request.Form["ID"];
}

Просмотр порции таблицы:

<div class="row">
<div class="col-md-12" style="overflow-y:scroll">
    <table class="table table-striped table-hover table-bordered" id="terminalReceipts">
        <thead>
            <tr>
                <th>Local Transaction Time</th>
                <th>Amount</th>
                <th>Receipt</th>
            </tr>
        </thead>
        <tbody>

            @foreach (var item in Model.TransactionsTests)
            {
                <tr>
                    <td>@item.TransactionTime</td>
                    @*<td>@Html.DisplayFor(modelItem => item.LocalTransactionTime)</td>*@
                    <td>@item.Amount</td>
                    <td>@Html.ActionLink("View Receipt", "Details", new { Key = 1 }, new { @class = "btn btn-primary btn-sm" }) <br /></td>
                </tr>
            }
        </tbody>
    </table>
</div>

Действие контроллера:

        // GET: TerminalReceipts
    public ActionResult Index(int id )
    {
         var model = TRBL.GetTransactionTestsData(id);
        //var model = new TerminalReceiptsVM();

        return View(model);
    }

Где в моем коде (особенно в части импорта представлений) я ошибаюсь?

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Пожалуйста, попробуйте ниже:

Удалите string Id = Request.Form["ID"]; из своего поля зрения и используйте button вместо ввода для управления кнопками:

@using (Html.BeginForm("Index", "TerminalReceipts"))
{
   <div>
     <input type="text" name="ID" />
     <button type="submit">Find Receipt</button>
   </div>
}

В действии контроллера отметьте метод действия какPOST, чтобы отличать его от GET метода.

// GET: TerminalReceipts
[HttpPost]
public ActionResult Index(int id )
{
     var model = TRBL.GetTransactionTestsData(id);
    //var model = new TerminalReceiptsVM();

    return View(model);
}

Обратите внимание, что если вы не пометите метод действия как POST, по умолчанию он будет считаться GET.Таким образом, проблема, с которой вы сталкиваетесь, заключается в том, что вы вызываете метод по запросу GET, где вам необходимо предоставить значение параметра в виде строки запроса.

PS: для вашего сценария я рекомендую использовать два action методы для Index просмотра.Один для GET, где отображается форма, второй POST метод действия для получения данных из формы при отправке.

0 голосов
/ 30 мая 2019

Вам необходимо изменить string Id = Request.Form["ID"]; и <input type="text" name="ID" /> на string Id = Request.Form["id"]; и <input type="text" name="id" />, сопоставляя его с именем периметра в нижнем регистре в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...