Что я пытаюсь сделать, так это то, что сначала мне нужно отобразить список членов, которые мне нужно добавить в группу. Затем пользователь будет выбирать каждый флажок для каждой строки членов, которые пользователь выбирает. Мой код уже запущен. Проблема в том, что когда я применил jquery.dataTable (который тоже отлично отображает), он не возвращает все необходимые данные, когда некоторые из членов скрыты (через следующую страницу или поиск). Все работает нормально, когда я нажимаю show 100, таким образом отображая все скрытые данные, dataTable.MVC 4 и dataTables: checkbox entry возвращает null ViewModel
мой ViewModel
public class ChooseMembersEditorViewModel
{
public bool Selected { get; set; }
public string Id { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public string Age { get; set; }
public ChooseMembersEditorViewModel()
{
this.Selected = false;
this.Id = "";
}
}
, которая находится внутри другой ViewModel
public class AddMemberViewModel
{
public List<Group> Group{ get; set; }
public List<ChooseMembersEditorViewModel> LGMembers { get; set; }
public AddLifegroupMemberViewModel()
{
this.Group= new List<Group>();
this.LGMembers = new List<ChooseMembersEditorViewModel>();
}
public IEnumerable<string> getSelectedIds()
{
var getSelected = (from members in this.LGMembers
where members.Selected
select members.Id); //returns error here saying value cannot be null
System.Diagnostics.Debug.WriteLine(string.Format("Count {0}", getSelected.Count()));
return getSelected;
}
}
Когда я проверяю 1 значений и нажмите Добавить член, я получаю значение не должно быть пустым изнутри getSelectedIds Linq
Благодарим вас за помощь се!
EDIT
Это, как я список всех пользователей. Участники SubmitSelectedMembers в основном получают все члены, чей идентификатор проверен и добавляет их в базу данных.
[Authorize(Roles = "Admin")]
public ActionResult AddLifegroupMembers(int id)
{
var model = new AddLifegroupMemberViewModel();
Lifegroup lifegroup = db.Lifegroup.Find(id);
int leaderAge = GetAge(lifegroup.LGLeader.User.Birthday);
ViewBag.Age = leaderAge;
System.Diagnostics.Debug.WriteLine(string.Format("{0}", lifegroup.LGName.ToString()));
var nonMembers = from u in db.Users
where !(from lgm in db.LGMember
select lgm.UserID).Contains(u.Id) //should not be part of any Lifegroup
&&
!(from l in db.Lifegroup
where l.LifegroupID.Equals(id)
select l.LGLeader.UserID).Contains(u.Id) //should not include leader of said group
select u;
System.Diagnostics.Debug.WriteLine(string.Format("Number of LG: {0}", model.Lifegroup.Count()));
foreach (var user in nonMembers)
{
int age = GetAge(user.Birthday);
var editorViewModel = new ChooseMembersEditorViewModel()
{
Id = user.Id,
Name = string.Format("{0} {1}", user.FirstName, user.LastName),
Selected = false,
Age = age.ToString(),
Sex = user.Sex
};
model.LGMembers.Add(editorViewModel);
}
model.Lifegroup.Add(lifegroup);
return View(model);
}
public ActionResult SubmitSelectedMembers(AddLifegroupMemberViewModel model)
{
var getSelected = (from members in model.LGMembers
where members.Selected
select members.Id);
List<string> _selected = new List<string>();
foreach (var selected in getSelected)
{
_selected.Add(selected);
}
//var selectedIds = model.getSelectedIds();
var lifegroupID = model.Lifegroup[0].LifegroupID;
//System.Diagnostics.Debug.WriteLine(string.Format("Lifegroup ID: {0}", model.Lifegroup.LifegroupID));
var selectedUsers = from u in db.Users
//where selectedIds.Contains(u.Id
where _selected.Contains(u.Id)
select u;
foreach (var users in selectedUsers)
{
var idManager = new IdentityManager();
idManager.AddUserToRole(users.Id, "LifegroupMember");
var lgmember = new LGMember()
{
LifegroupID = lifegroupID,
UserID = users.Id,
DateJoined = DateTime.Now
};
/*
* Insert Code to insert part of Lifegroup to GrowthMileStone
*/
db.LGMember.Add(lgmember);
}
db.SaveChanges();
return RedirectToAction("ViewLifegroups");
}
Привет @badaBoom, я не совсем уверен, что вы имеете в виду инициализации объекта. Я уже могу отправить и вызвать объекты должным образом. Единственная проблема заключается в том, что dataTable, похоже, скрывает элементы при поиске или поворачивает предыдущее выполнение страницы. Таким образом, некоторые значения указывают, что они равны нулю. – Dominic
Как вы вставляете объекты в LGMembers? Как выглядит код? Можете ли вы поделиться им также? Являются ли объекты в списке экземплярами LGMembers? Убедитесь, что объекты типа ChooseMembersEditorViewModel созданы. – SamekaTV
@ Dominic вы это проверили? Не забудьте ответить. – SamekaTV