C# ASP.NET MVC其中一个表单未收到验证消息

C# ASP.NET MVC其中一个表单未收到验证消息,c#,asp.net-mvc,forms,C#,Asp.net Mvc,Forms,我的问题是:我创建了一个视图,希望能够在其中删除和添加新的身份角色。为此,我创建了两种形式,它们调用两种不同的操作。我创建了一个大模型,它由较小的模型组成,这些模型由形式和动作绑定在一起。一切都按预期运行,模型被正确绑定,数据在那里,正确的操作被执行 不要误解我的意思,我知道这些是单独的表单,我知道它们不会同时显示验证消息,因为一次只能发布一个表单。问题是,当我在CreateNewRole表单上单击submit时,验证消息就在那里,但是当我在CreateNewRole操作上单击submit时,我

我的问题是:我创建了一个视图,希望能够在其中删除和添加新的身份角色。为此,我创建了两种形式,它们调用两种不同的操作。我创建了一个大模型,它由较小的模型组成,这些模型由形式和动作绑定在一起。一切都按预期运行,模型被正确绑定,数据在那里,正确的操作被执行

不要误解我的意思,我知道这些是单独的表单,我知道它们不会同时显示验证消息,因为一次只能发布一个表单。问题是,当我在
CreateNewRole
表单上单击submit时,验证消息就在那里,但是当我在
CreateNewRole
操作上单击submit时,我没有得到任何验证消息,也没有对html元素应用任何验证类,通常存在“字段验证有效”和“字段验证错误”类,而它在
CreateNewRole
中完全存在

为什么验证在第一个表单上有效,而在第二个表单上无效?我找不到这两种形式的区别,我没有注意到什么吗

当我调试
操作的modelstate时,错误就在那里,但不知何故视图没有得到通知

看法

@model Models.ViewModels.RolePanelViewModel
@使用扩展
角色小组
@使用(Html.BeginForm(“CreateNewRole”、“Administrator”))
{
@LabelFor(l=>l.NewRoleRolePanelViewModel.NewIdentityRole.Name)
@TextBoxFor(t=>t.newrolerelepanelviewmodel.NewIdentityRole.Name)
@Html.ValidationMessageFor(t=>t.NewRoleRolePanelViewModel.NewIdentityRole.Name)
Dodaj角色
}
@使用(Html.BeginForm(“删除者”、“管理员”))
{
@LabelFor(l=>l.ListRolePanelViewModel.SelectedIdentityRoles)
@Html.ListBoxFor(l=>l.ListRolePanelViewModel.SelectedIdentityRoles,@Model.ListRolePanelViewModel.identityrollessectListItems)
@Html.ValidationMessageFor(t=>t.ListRolePanelViewModel.SelectedIdentityRoles)
斯卡苏伊维布兰酒店
}
模型

public class RolePanelViewModel
{
    public ListRolePanelViewModel ListRolePanelViewModel { get; set; }
    public NewRoleRolePanelViewModel NewRoleRolePanelViewModel { get; set; }
}

public class ListRolePanelViewModel
{
    public List<IdentityRoleDTO> IdentityRoles { get; set; }
    public List<SelectListItem> IdentityRolesSelectListItems { get; set; }
    [Required(ErrorMessage = "Należy wybrać przynajmniej jedną pozycję z listy")]
    public List<string> SelectedIdentityRoles { get; set; }        
}

public class NewRoleRolePanelViewModel
{
    public IdentityRoleDTO NewIdentityRole { get; set; }
}
public class IdentityRoleDTO
{
    public string Id { get; set; }
    [Required(ErrorMessage = "Nowa rola musi mieć nazwę")]
    [MinLength(5)]
    public string Name { get; set; }
    public List<IdentityUserRole> Users { get; set; }
}
public类RolePanelViewModel
{
公共ListRolePanelViewModel ListRolePanelViewModel{get;set;}
公共NewRolePanelViewModel NewRoleRolePanelViewModel{get;set;}
}
公共类ListRolePanelViewModel
{
公共列表标识符{get;set;}
公共列表标识RoleSelectListItems{get;set;}
[必需(ErrorMessage=“Należy wybraćprzynajmniej jednąpozycjęz listy”)]
公共列表SelectedIdentityRoles{get;set;}
}
公共类NewRoleRolePanelViewModel
{
public IdentityRoleDTO NewIdentityRole{get;set;}
}
公共类标识已指定给
{
公共字符串Id{get;set;}
[必需(ErrorMessage=“Nowa rola musi miećnazwę”)]
[第(5)款]
公共字符串名称{get;set;}
公共列表用户{get;set;}
}
行动

public ActionResult OpenRolePanel()
{
    var roles = _context.Roles.ToList();
    var viewModel = new RolePanelViewModel
    {
        ListRolePanelViewModel = new ListRolePanelViewModel
        {
            IdentityRolesSelectListItems = GetSelectListItems(roles,
                (a) => new SelectListItem {Value = a.Id.ToString(), Selected = false, Text = a.Name})

        },
        NewRoleRolePanelViewModel = new NewRoleRolePanelViewModel()

    };
    return View("RolePanel", viewModel);
} 

[HttpPost]
public async Task<ActionResult> CreateNewRole(NewRoleRolePanelViewModel newRoleRolePanelViewModel)
{
    if(!ModelState.IsValid)
    {
        var roles = _context.Roles.ToList();
        var viewModel = new RolePanelViewModel
        {
            ListRolePanelViewModel = new ListRolePanelViewModel
            {
                IdentityRolesSelectListItems = GetSelectListItems(roles,
                    (a) => new SelectListItem { Value = a.Id.ToString(), Selected = false, Text = a.Name })

            },
            NewRoleRolePanelViewModel = newRoleRolePanelViewModel
        };
        return View("RolePanel", viewModel);
    }
    var roleStore = new RoleStore<IdentityRole>(new ApplicationDbContext());
    var roleManager = new RoleManager<IdentityRole>(roleStore);

    await roleManager.CreateAsync(new IdentityRole(newRoleRolePanelViewModel.NewIdentityRole.Name));


    return View("RolePanel");
}

[HttpPost]
public ActionResult RemoveRoles(ListRolePanelViewModel listRolePanelViewModel)
{
    if (!ModelState.IsValid)
    {
        var roles = _context.Roles.ToList();
        var viewModel = new RolePanelViewModel
        {
            ListRolePanelViewModel = listRolePanelViewModel,
            NewRoleRolePanelViewModel = new NewRoleRolePanelViewModel()
        };
        viewModel.ListRolePanelViewModel.IdentityRolesSelectListItems = GetSelectListItems(roles,
            (a) => new SelectListItem {Value = a.Id.ToString(), Selected = false, Text = a.Name});

        return View("RolePanel", viewModel);
    }

    return View("RolePanel");
}
public ActionResult OpenRolePanel()
{
var roles=_context.roles.ToList();
var viewModel=新角色扮演者视图模型
{
ListRolePanelViewModel=新ListRolePanelViewModel
{
IdentityRolesSelectListItems=GetSelectListItems(角色,
(a) =>新建SelectListItem{Value=a.Id.ToString(),Selected=false,Text=a.Name})
},
NewRoleRolePanelViewModel=新的NewRoleRolePanelViewModel()
};
返回视图(“角色面板”,视图模型);
} 
[HttpPost]
公共异步任务CreateNewRole(NewRoleRolePanelViewModel NewRoleRolePanelViewModel)
{
如果(!ModelState.IsValid)
{
var roles=_context.roles.ToList();
var viewModel=新角色扮演者视图模型
{
ListRolePanelViewModel=新ListRolePanelViewModel
{
IdentityRolesSelectListItems=GetSelectListItems(角色,
(a) =>新建SelectListItem{Value=a.Id.ToString(),Selected=false,Text=a.Name})
},
NewRoleRolePanelViewModel=NewRoleRolePanelViewModel
};
返回视图(“角色面板”,视图模型);
}
var roleStore=new roleStore(new ApplicationDbContext());
var roleManager=新roleManager(roleStore);
等待rolemager.CreateAsync(新IdentityRole(newrolerelepanelviewmodel.NewIdentityRole.Name));
返回视图(“RolePanel”);
}
[HttpPost]
公共行动结果(ListRolePanelViewModel ListRolePanelViewModel)
{
如果(!ModelState.IsValid)
{
var roles=_context.roles.ToList();
var viewModel=新角色扮演者视图模型
{
ListRolePanelViewModel=ListRolePanelViewModel,
NewRoleRolePanelViewModel=新的NewRoleRolePanelViewModel()
};
viewModel.ListRolePanelViewModel.IdentityRolesSelectListItems=GetSelectListItems(角色,
(a) =>new SelectListItem{Value=a.Id.ToString(),Selected=false,Text=a.Name});
返回视图(“角色面板”,视图模型);
}
返回视图(“RolePanel”);
}
如果要运行代码,可能需要自定义方法

private List<SelectListItem> GetSelectListItems<T>(List<T> dbSetResult, Func<T,SelectListItem> Func)
        {          
            var result = new List<SelectListItem>();

            foreach (var item in dbSetResult)
            {
                result.Add(Func(item));
            }

            return result;
        }
private List GetSelectListItems(List dbSetResult,Func Func)
{          
var result=新列表();
foreach(dbSetResult中的var项)
{
结果。添加(功能(项目));
}
返回结果;
}

尝试将“SelectedIdentityRoles”更改为字符串[],而不是列表。您希望出现什么验证错误?在什么情况下?未测试,但我怀疑问题与您的POST方法参数与您在视图中使用的模型不同有关(并且方法应该
private List<SelectListItem> GetSelectListItems<T>(List<T> dbSetResult, Func<T,SelectListItem> Func)
        {          
            var result = new List<SelectListItem>();

            foreach (var item in dbSetResult)
            {
                result.Add(Func(item));
            }

            return result;
        }