Выпадающий список не проходит первую проверку - PullRequest
0 голосов
/ 23 сентября 2019

Среда: VS 2019, EF, Core 2.2 и ASP.net MVC Web Application.

Проблема: Мой раскрывающийся список или, возможно, текстовое поле вводапривязан к модели, выдает ошибку проверки при первом отправлении, но корректно отправляет во втором сообщении.

Что мне нужно: Я хотел бы получить краткий список предметовэто ограничивает выбор пользователей, при выборе списка я хочу привязать это значение к переменной модели, не так ли?Ну, я, должно быть, чего-то не понимаю.

То, что у меня есть до сих пор:

Контроллер Получить код:

    if (applicationUser == null)
    {
        return NotFound();
    }

    // Set Page Values
    ViewBag.Roles = RolesSelectList(applicationUser.RoleName);

    return View(applicationUser);

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

private List<SelectListItem> RolesSelectList(string selectedRole)
{
    var selectList = new List<SelectListItem>();
    selectList.Add(new SelectListItem { Text = "None", Value = "None".ToString(), Selected = (selectedRole == "None") });
    selectList.Add(new SelectListItem { Text = "Staff", Value = "Staff".ToString(),  Selected = (selectedRole == "Staff") });
    selectList.Add(new SelectListItem { Text = "User", Value = "User".ToString(), Selected = (selectedRole == "User") });
    return selectList;
}

Атрибуты проверки поля модели:

   [Required]
    [RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "Role Name must be Alphabectic greater than 4 characters")]
    [StringLength(5, MinimumLength = 4, ErrorMessage = "{0} must be between {2} and {1} characters.")]
    [Display(Name = "Role Name")]
    public string RoleName { get; set; }

HTML страницы (относительная информация):

            <div class="form-group">
                <label asp-for="RoleName" class="control-label"></label>
                <input id="tbxRoleName" asp-for="RoleName" class="form-control" style="width:0px;height:0px;margin:0;padding:0px;border:none;"/>
                @Html.DropDownList("RoleName", new SelectList(ViewBag.Roles as System.Collections.IList, "Text", "Value"),
                                new { @class = "form-control" })
                <span asp-validation-for="RoleName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Save" class="btn btn-primary" />
            </div>
        </form>

<div>
    <a asp-action="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}

    <script>
        $('#RoleName').change(function () {
            $("#tbxRoleName").val($("#RoleName").val());
        });
    </script>

Объяснение HTML и скрипта: Я действительно хочу, чтобы раскрывающийся список связывался только с полем модели, но по какой-то причине я не могу получить раскрывающийся список для отображения начальных значений или если и когда я получу список для отображения выбранного значения по умолчанию,это больше не меняет роль в базе данных.В итоге я оставил поле ввода привязанным к модели и использовал jquery для изменения значения ввода на значение раскрывающегося списка при его изменении.Показанный код работает, но когда я отправляю форму, я получаю ошибки проверки.Если я нажму кнопку отправить, форма будет отправлена ​​правильно.Я смотрел метод поста, он, кажется, не получил удар до второго поста.

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

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

1 Ответ

0 голосов
/ 24 сентября 2019

Я нашел работу, с одной оговоркой.Мой контроллер получил код:

    // Set Page Values
    ViewBag.RolesList = new SelectList(RolesSelectList(), "Value", "Text", applicationUser.RoleName);

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

private IEnumerable<SelectListItem> RolesSelectList()
{
    var selectList = new List<SelectListItem>();
    selectList.Add(new SelectListItem() { Value = "None",  Text = "None" });
    selectList.Add(new SelectListItem() { Value = "Staff", Text = "Staff"});
    selectList.Add(new SelectListItem() { Value = "User",  Text = "User" });
    return selectList;
}

Страница HTML (относительная информация):

<div class="form-group">
    @Html.DropDownList("UserRole", ViewBag.RolesList as SelectList,
        "-- Select Role --", new { @class = "form-control" })
</div>

И удалил JQuery:

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

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