2014-10-22 3 views
0

В настоящее время я работаю над проектом, в котором разрешения пользователей сайта и их разрешения отображаются в DevExpress GridView. Разрешения пользователя - это просто флажки. Проблема, с которой я сталкиваюсь, - установить объект для флажка.Флажок установки проблемы отключен

Первоначально сайт использовался только одним сущностью (т.е. офисом). Моя цель - использовать несколько офисов. Для этого я создал раскрывающийся список, чтобы переключаться между офисами, чтобы вы могли устанавливать разрешения пользователя на основе каждого офиса. Однако у каждого офиса нет одинакового списка разрешений.

Ex. Первый офис имеет полный доступ к сайту (12 модулей) (это был оригинальный офис). Второй офис имеет доступ только к 5 модулям на сайте. Я создал метод для решения этой проблемы, который отключает все, кроме 5 модулей для второго офиса.

О разработке, что я создал, чтобы справиться с этим. Однако, когда мы перешли на нашу среду тестирования, она перестала работать. Я считаю, что есть две петли foreach, используемые для создания поля флажка вместе с данными столбца сетки. Ниже приводится то, что я сделал, чтобы заставить мое решение работать.

Посмотреть

foreach (var item in Model.Applications) 
     { 
      settings.Columns.AddBand(bnd => 
      { 
       bnd.Name = string.Format("{0}", item.Name); 
       bnd.Caption = item.Name + " Roles"; 

       foreach (var subitem in item.Roles) 
       { 
        bnd.Columns.Add(col => 
        { 
         col.Name = string.Format("{0}", subitem.Name); 
         col.FieldName = subitem.Name; 
         col.VisibleIndex = index; 
         col.Width = Unit.Pixel(75); 
         col.ColumnType = MVCxGridViewColumnType.CheckBox; 
         col.Caption = subitem.Description; 
         col.Settings.AllowAutoFilter = DefaultBoolean.False; 
         col.Settings.AllowHeaderFilter = DefaultBoolean.False; 
         col.Settings.AllowSort = DefaultBoolean.False; 

         col.SetDataItemTemplateContent(temp => 
         { 
         %> 
         <%=Html.CheckBox(
           string.Format("chk{0}{1}", col.Name, temp.KeyValue.ToString().Replace("-", "")), 
           (bool)DataBinder.Eval(temp.DataItem, col.Name), 
           SCCView.Areas.Admin.Models.ModifyPrivilegeModel.GetHtmlAttributes(bnd.Name, temp.KeyValue, col.Name, item.Name) 
           )%> 
         <% 
         }); 
        }); 
        index++; 
       } 
      }); 
     } 

Модель

public static object GetHtmlAttributes(string bndName, object keyValue, string colName, string itemName) 
     { 
      //Check to see if SCNGO is being used 
      if (HttpContext.Current.Session["SCNGOAllowedApps"] != null) 
      { 
       //Check to see if that Application is within SCNGO currently 
       var scngoApps = (List<string>)HttpContext.Current.Session["SCNGOAllowedApps"]; 
       var app = scngoApps.Where(scngo => scngo == itemName).Select(scngo => scngo).FirstOrDefault(); 

       //App is not, so disable it 
       if (app == null) 
        return new 
        { 
         onClick = string.Format(@"CheckChanged(this, '{0}', '{1}', '{2}');", 
             bndName, 
             keyValue, 
             colName), 
         Class = "ModifyPrivChkBox", 
         disabled = "disabled" 
        }; 
      } 

      //SCC, or at the very least an app within SCNGO 
      return new 
      { 
       onClick = string.Format(@"CheckChanged(this, '{0}', '{1}', '{2}');", 
             bndName, 
             keyValue, 
             colName), 
       Class = "ModifyPrivChkBox" 
      }; 
     } 

На развитие, флажки отключены. На нашем тестовом сайте это не так. Я посмотрел, есть ли сеанс, который я использовал для этого, или нет, и это так. Я считаю, что это вопрос. Переменная приложения, которую я создал, всегда заканчивается последней записью в списке, поэтому всегда можно отключить этот флажок.

Мой вопрос: есть ли способ справиться с этой проблемой времени и сделать ее более эффективной?

ответ

0

Я выяснил проблему надолго. Проблема была в itemName. Он постоянно возвращался как одно и то же значение независимо от того, где он был в цикле. Как только я изменил его на colName, он внезапно начал работать.

Смежные вопросы