Jquery 第一次验证失败的下拉列表

Jquery 第一次验证失败的下拉列表,jquery,model-view-controller,Jquery,Model View Controller,环境是:VS2019、EF、Core 2.2和ASP.net MVC Web应用程序 问题:我的下拉列表,或者绑定到模型的输入文本框,在第一次提交时给出验证错误,但在第二次提交时正确提交 我想要的是:我想要一个限制用户选择的项目的简短列表,在列表选择时,我想要将该值绑定到模型变量,不是吗?嗯,我一定不明白什么 到目前为止我拥有的: 控制器获取代码: if (applicationUser == null) { return NotFound(); }

环境是:VS2019、EF、Core 2.2和ASP.net MVC Web应用程序

问题:我的下拉列表,或者绑定到模型的输入文本框,在第一次提交时给出验证错误,但在第二次提交时正确提交

我想要的是:我想要一个限制用户选择的项目的简短列表,在列表选择时,我想要将该值绑定到模型变量,不是吗?嗯,我一定不明白什么

到目前为止我拥有的:

控制器获取代码:

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

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

    return View(applicationUser);
    // Set Page Values
    ViewBag.RolesList = new SelectList(RolesSelectList(), "Value", "Text", applicationUser.RoleName);
要填充下拉列表的帮助器方法:

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;
}
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(相关信息):


@Html.DropDownList(“RoleName”,新选择列表(ViewBag.Roles as System.Collections.IList,“Text”,“Value”),
新的{@class=“表单控制”})
返回列表
@节脚本{
@{wait Html.RenderPartialAsync(“_validationScript”);}
$('#RoleName')。更改(函数(){
$(“#tbxRoleName”).val($(“#RoleName”).val());
});
HTML和脚本说明: 我真的只想让下拉列表绑定到模型字段,但由于某种原因,我无法让下拉列表显示初始值,或者当我让列表显示选定的默认值时,它不再改变数据库中的角色。因此,我最终将输入字段绑定到模型,并使用jquery更改输入的值当下拉列表的值发生变化时,它将被正确地提交到下拉列表的值中。显示的代码有效,但当我提交表单时,我会收到验证错误。如果我再次点击submit,表单将正确提交。我查看了post方法,它似乎直到第二次发布时才被点击

我还尝试将输入的类型设置为隐藏,但当我这样做时,表单永远不会提交,因此样式很难看


非常感谢您提供的任何帮助或见解。

我找到了一个解决方案,但有一点需要注意。 我的控制器获取代码:

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

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

    return View(applicationUser);
    // Set Page Values
    ViewBag.RolesList = new SelectList(RolesSelectList(), "Value", "Text", applicationUser.RoleName);
要填充下拉列表的帮助器方法:

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;
}
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;
}
private IEnumerable角色选择列表()
{
var selectList=新列表();
添加(新的SelectListItem(){Value=“None”,Text=“None”});
添加(新的SelectListItem(){Value=“Staff”,Text=“Staff”});
添加(新的SelectListItem(){Value=“User”,Text=“User”});
返回选择列表;
}
页面HTML(相关信息):


@Html.DropDownList(“用户角色”,ViewBag.RolesList作为SelectList,
“--选择角色--”,新建{@class=“表单控制”})
并删除了JQuery:


唯一需要注意的是,它让我删除了model字段上的required属性。如果有人有很好的建议,否则我会接受这一点作为我的答案。

只是一个更新,我也尝试过:@Html.DropDownListFor(l=>l.RoleName,new SelectList(ViewBag.Roles,“Text”,“Value”),new{@class=“form control”})但是,这根本无法验证。