Отправить MVC с пустым полем Razor TextBoxFor

Моя форма MVC не будет отправлена, если у меня нет значения в поле TextBoxFor. Я использую TextBoxFor, потому что я хочу, чтобы значение поля сохранялось в атрибуте модели. Мне нужно одно из двух следующих решений, либо одно удовлетворяет мои потребности. При отправке формы мне нужно либо сохранить значение обычного TextBox в атрибуте модели, либо разрешить отправку, когда мой TextBoxFor пуст.

В настоящее время мой код выглядит так:

@using (Ajax.BeginForm("PartialResults", "Students", new { LoadItemsOnly = true }, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "find-results" }))
{
<div class="inline-ct">
    <table>
        <tr>
            <td><span class="lbl">Name: </span></td>
            @Html.TextBoxFor(m => m.Filter, new { autofocus = "autofocus", id = "name" })
        </tr>
        <tr>
            <td><span class="lbl">@Html.DisplayNameFor(m => m.LocationID): </span></td>
            <td>@Html.DropDownListFor(m => m.LocationID, new SelectList(Model.Locations, "Key", "Value"))</td>
        </tr>
        <tr>
            <td><span class="lbl">@Html.DisplayNameFor(m => m.ADGuid): </span></td>
            <td>@Html.DropDownListFor(m => m.ADGuid, new SelectList(Model.Teachers, "Key", "Value"))</td>
        </tr>
        <tr>
            <td><span class="lbl">@Html.DisplayNameFor(m => m.ClassCode): </span></td>
            <td>@Html.DropDownListFor(m => m.ClassCode, new SelectList(Model.SchoolClasses, "Key", "Value"))</td>
        </tr>
        <tr>
            <td><button type="submit" class="btn-primary" id="btn-find">Find</button></td>
            <td></td>
        </tr>
    </table>
</div>

<div id="student-find-results" class="row">
</div>
}

Как уже упоминалось, это прекрасно работает, когда есть значение TextBoxFor, однако форма не передается, если она пуста. Любая помощь будет принята с благодарностью.

ПРИМЕЧАНИЕ. Я попытался добавить кнопку onclick даже к кнопке, но она не отправляется контроллеру.

1 ответ

Решение

Прежде всего, проверьте, не добавляете ли вы атрибут [required] в поле объекта ViewModel, которое вы передаете в представление:

[Required(ErrorMessage = "")]
public string MyAttribute { get; set; }

Во-вторых, убедитесь, что поле вашего текстового поля обнуляется, используя? Ключевое слово в вашей ViewModel, как это

public int? MyAttribute { get; set; }

В-третьих, проверьте, есть ли проверка JQuery над полями на стороне клиента. Обратите внимание, что если вы хотите отключить проверку для всех ваших полей, вы можете изменить свой контроллер, чтобы он не проверял ModelState, удалив проверку ModelState:

if(ModelState.IsValid)
{
// TODO:
}
Другие вопросы по тегам