如果Controller中的语句未保存更改

时间:2015-08-12 09:08:43

标签: asp.net asp.net-mvc if-statement controller

我的控制器中有一个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");
}

如果您需要更多信息,请与我们联系。

由于

1 个答案:

答案 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;
            }
        }
    }