Среда: 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 для изменения значения ввода на значение раскрывающегося списка при его изменении.Показанный код работает, но когда я отправляю форму, я получаю ошибки проверки.Если я нажму кнопку отправить, форма будет отправлена правильно.Я смотрел метод поста, он, кажется, не получил удар до второго поста.
Я также пытался установить тип ввода на скрытый, но когда я это сделал, форма никогда не отправлялась, поэтому уродливое оформление.
Любая помощь или понимание, которое вы можете дать, приветствуется.