我的控制器中有一个if语句,用于决定是否选中复选框。
它在if语句中工作正常并更改属性,但当我将其发送回视图时,这些更改不会保存。
控制器
public ActionResult GetUserRights(string userLogin)
{
if (userLogin != null)
{
Manager manager = new Manager();
var userlogin = manager.GetUserData(userLogin);
var userrights = userlogin.RightsId.Select(s => new { id = s, text = s });
var rightdetails = manager.GetAllRightsRows();
var rightsDetails = from r in rightdetails
orderby r.Id
select new RightDetail
{
RightID = r.Id,
RightDescription = r.Description,
RightName = r.Name,
ParentID = r.ParentId,
TypeColor = r.TypeColor,
Value = r.Value,
Checked = false
};
foreach (var userright in userrights)
{
foreach (var rightdets in rightsDetails)
{
if(rightdets.RightID == userright.id)
{
rightdets.Checked = true;
break;
}
}
}
return View("_RightsTreeListPartial", rightsDetails); <==== ALL CHECKED
PROPERTIES ARE false EVEN THOUGH SOME ARE BEING CHANGED IN THE IF STATEMENT.
}
return View("Index");
}
如果您需要更多信息,请与我们联系。
由于
答案 0 :(得分:0)
使用IEnumerable
,我不确定原因,但您无法使用if statement
编辑项目,因此下面的代码是正确的,并按预期执行,但是因为它是IEnumerable
保存的更改没有,下面的过程非常繁重,我们需要做的很长时间。
原始代码
foreach (var userright in userrights)
{
foreach (var rightdets in rightsDetails)
{
if(rightdets.RightID == userright.id)
{
rightdets.Checked = true;
break;
}
}
}
新代码花费的时间更少,因此可以缩短等待时间。首先,IEnumerable
转换为List
,然后,使用for-loop
,迭代数据直到找到匹配项,然后在if statement
内更改项目(使用原始代码只需从IEnumerable
转换为List
即可,但我不建议使用它。)
新代码
var rightdetail = rightsDetails.ToList();
foreach (var userright in userrights)
{
for (var i = 0; i < rightdetail.Count(); i++)
{
if (rightdetail[i].RightID == userright.id)
{
rightdetail[i].Checked = true;
break;
}
}
}