Модель не получает заданные значения при отправке формы - PullRequest
0 голосов
/ 29 мая 2019

Я новичок в MVC и у меня в контроллере есть следующий ActionMethod:

 public async Task<ActionResult> ViewSsoProviders(int? page, string nameFilter = "", string bpIdFilter = "",
        string protocolFilter = "")

Я пытаюсь вызвать его через следующую форму на мой взгляд:

@{
using (Html.BeginForm("ViewSsoProviders", "SsoAdmin", new
{
    page = 1,
    nameFilter = Model.ProviderNameFilter,
    bpIdfilter = Model.BusinessPartnerIdFilter,
    protocolFilter = Model.ProtocolFilterSelection
}))
{
    <div id="providerForm">
        @Html.ValidationSummary()
        <div class="form-group row">
            <span class="col-sm-4">
                @Html.LabelFor(m => m.ProviderNameFilter)
                @Html.TextBoxFor(m => m.ProviderNameFilter, new {@class = "form-control"})
            </span>
            <span class="col-sm-4">
                @Html.LabelFor(m => m.BusinessPartnerIdFilter)
                @Html.TextBoxFor(m => m.BusinessPartnerIdFilter, new {@class = "form-control", style = "display: block"})
            </span>
            <span class="col-sm-4">
                @Html.LabelFor(m => m.ProtocolFilterOptions)
                @Html.TranslatedDropDownListFor(m => m.ProtocolFilterSelection, Model.ProtocolFilterOptions, new {id = "ddlProtocols", @class = "form-control"})
            </span>
        </div>
        <button class="btn" type="submit" value="Filter">@Html.Translate("Filter")</button>
    </div>

Метод используется, однако фильтрам не присвоены значения, я могу жестко закодировать переменную 'page', и она достигнет моего контроллера с правильным значением, поэтому проблема не в самой маршрутизации.Есть ли здесь какая-то очевидная причина, по которой моим переменным маршрута не удалось бы присвоить значения?

Редактировать: Стоит отметить, что если я вместо этого передам 'null', а не любые значения маршрута в представлении, я смогу передать модельк контроллеру только с полями в форме назначенных данных.

1 Ответ

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

Вы отправляете форму, которая должна быть постом.Вы должны иметь новый метод и украсить его с помощью:

[HttpPost]

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

Пример.

[HttpPost]
public ActionResult ViewSsoProviders(MyViewModel model)
{
     //Do a redirection to ViewSoProviders
     //ex.
     return RedirectToAction("ViewSsoProviders", new {nameFilter = model.NameFiler, bpIdFilter = model.BpIdFilter, protocolFilter= model.ProtocolFilter });
}

И укажите метод формы в представлении бритвы:

Html.BeginForm("ViewSsoProviders", "SsoAdmin", FormMethod.Post, new
{
    page = 1,
    nameFilter = Model.ProviderNameFilter,
    bpIdfilter = Model.BusinessPartnerIdFilter,
    protocolFilter = Model.ProtocolFilterSelection
}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...