Asp.net mvc 4 MVC4型号';s的绑定属性在提交帖子后丢失

Asp.net mvc 4 MVC4型号';s的绑定属性在提交帖子后丢失,asp.net-mvc-4,Asp.net Mvc 4,我遇到的问题是,尽管AssignedUsers属性在我的构造函数中进行了初始化(在离开GET Edit之前),但在提交表单之后,它在POST Edit操作中返回为null。所有其他属性保持其状态 除了在ModelState.IsValid检查之后(以及返回视图之前)重新初始化属性之外,还有其他方法可以克服此问题吗 型号: public class GroupModel { public List<int> AssignedUserIds { get; set; }

我遇到的问题是,尽管AssignedUsers属性在我的构造函数中进行了初始化(在离开GET Edit之前),但在提交表单之后,它在POST Edit操作中返回为null。所有其他属性保持其状态

除了在ModelState.IsValid检查之后(以及返回视图之前)重新初始化属性之外,还有其他方法可以克服此问题吗

型号:

 public class GroupModel {

    public List<int> AssignedUserIds { get; set; }

    MultiSelectList _assignedUsers;
    public MultiSelectList AssignedUsers () {
       return _assignedUsers ?? _assignedUsers = new MultiSelectList(
            AllUserGroups
            .Where(userGroup => userGroup.GroupId == Id)
            .Select(userGroup => userGroup.Users)
            .ToList(),
            "Id",
            "Username");
    }
    private object _allUserGroups; /* not sure what this is */
    private object AllUserGroups {
          get { return _allUserGroups ?? _allUserGroups = AccountManagementAdapter.GetUserGroups();
    }

    public GroupModel(Groups group) {
           AssignedUserIds = AllUserGroups
                 .Where(userGroup => userGroup.GroupId == Id)
                 .Select(userGroup => userGroup.UserId)
                 .ToList();
   }

您没有在表单中发布数据。所以它不会返回到edit方法。这是你应该做的,我不建议将数据发布到你的表单中

我会做出这样的改变

型号:

 public class GroupModel {

    public List<int> AssignedUserIds { get; set; }

    MultiSelectList _assignedUsers;
    public MultiSelectList AssignedUsers () {
       return _assignedUsers ?? _assignedUsers = new MultiSelectList(
            AllUserGroups
            .Where(userGroup => userGroup.GroupId == Id)
            .Select(userGroup => userGroup.Users)
            .ToList(),
            "Id",
            "Username");
    }
    private object _allUserGroups; /* not sure what this is */
    private object AllUserGroups {
          get { return _allUserGroups ?? _allUserGroups = AccountManagementAdapter.GetUserGroups();
    }

    public GroupModel(Groups group) {
           AssignedUserIds = AllUserGroups
                 .Where(userGroup => userGroup.GroupId == Id)
                 .Select(userGroup => userGroup.UserId)
                 .ToList();
   }
您可以这样做

public class GroupModel {

    public List<int> AssignedUserIds { get; set; }

    public MultiSelectList AssignedUsers { get; set; }

    private object allUserGroups
    public GroupModel() {
        allUserGroups = AccountManagementAdapter.GetUserGroups();
        AssignedUsers = new MultiSelectList(
            allUserGroups
            .Where(userGroup => userGroup.GroupId == Id)
            .Select(userGroup => userGroup.Users)
            .ToList(),
            "Id",
            "Username");
    }
    public GroupModel(Groups group) :this() {
        AssignedUserIds = allUserGroups
             .Where(userGroup => userGroup.GroupId == Id)
             .Select(userGroup => userGroup.UserId)
             .ToList();
    }
公共类GroupModel{
公共列表AssignedUserID{get;set;}
公共多选列表分配用户{get;set;}
私有对象组
公共分组模型(){
allUserGroups=AccountManagementAdapter.GetUserGroups();
AssignedUsers=新的多选列表(
冲积层群
.Where(userGroup=>userGroup.GroupId==Id)
.Select(userGroup=>userGroup.Users)
.ToList(),
“身份证”,
“用户名”);
}
公共组模型(组组):this(){
AssignedUserId=AllUserGroup
.Where(userGroup=>userGroup.GroupId==Id)
.Select(userGroup=>userGroup.UserId)
.ToList();
}
 public class GroupModel {

    public List<int> AssignedUserIds { get; set; }

    MultiSelectList _assignedUsers;
    public MultiSelectList AssignedUsers () {
       return _assignedUsers ?? _assignedUsers = new MultiSelectList(
            AllUserGroups
            .Where(userGroup => userGroup.GroupId == Id)
            .Select(userGroup => userGroup.Users)
            .ToList(),
            "Id",
            "Username");
    }
    private object _allUserGroups; /* not sure what this is */
    private object AllUserGroups {
          get { return _allUserGroups ?? _allUserGroups = AccountManagementAdapter.GetUserGroups();
    }

    public GroupModel(Groups group) {
           AssignedUserIds = AllUserGroups
                 .Where(userGroup => userGroup.GroupId == Id)
                 .Select(userGroup => userGroup.UserId)
                 .ToList();
   }
@Html.ListBoxFor(group => group.AssignedUserIds, Model.AssignedUsers())
public class GroupModel {

    public List<int> AssignedUserIds { get; set; }

    public MultiSelectList AssignedUsers { get; set; }

    private object allUserGroups
    public GroupModel() {
        allUserGroups = AccountManagementAdapter.GetUserGroups();
        AssignedUsers = new MultiSelectList(
            allUserGroups
            .Where(userGroup => userGroup.GroupId == Id)
            .Select(userGroup => userGroup.Users)
            .ToList(),
            "Id",
            "Username");
    }
    public GroupModel(Groups group) :this() {
        AssignedUserIds = allUserGroups
             .Where(userGroup => userGroup.GroupId == Id)
             .Select(userGroup => userGroup.UserId)
             .ToList();
    }