1

私は JQgrid と mvc3 に非常に慣れていません。編集機能を備えた非常に基本的な jQgrid があります。

JqG​​rid のロード時に特定のユーザー (AD によって認証された) の jqgrid.navgrid の編集リンクを無効にし、異なるロールを持つ他のユーザーに対して有効にしたい。

ユーザーがグリッドデータを編集できないように制限することはできますが、それだけでは十分ではありません.JqGridで編集可能なリンクさえ表示されないようにします.

これが私のビュー(index.cshtml)にあるJqGridです。

 jQuery(document).ready(function () {
             jQuery('#list').jqGrid({
             colNames: ['id', 'CountryCode','Node','EligFactor'],
             colModel: [
                       { name: 'id', index: 'id', width: 150, height: 100, align: 'left' },
                       { name: 'CountryCode', index: 'CountryCode', width: 150, align: 'left' },
                       {name: 'Node', index: 'Node', width: 150, height: 100, align: 'left' },
                       {name: 'EligFactor', index: 'EligFactor', width: 150, height: 100, align: 'left', editable: true, edittype: 'text' }
                       ],
            url: '@Url.Action("DynamicGridData")',
            datatype: 'json',
            mtype: 'POST',
            pager: jQuery('#pager'),
            rowNum: 10,
            rowList: [5, 10, 15, 20, 25],
            sortname: 'Id',
            sortorder: "asc",
            viewrecords: true,
            imgpath: '',
            caption: 'Eligibility Factor Grid',
            imgpath: '/Content/images',
            height: '210px'

             }).navGrid('#pager', { edit: true, add: false, del: false, search: false, refresh: true },
                 { url: '@Url.Action("EditRecord")', closeAfterEdit: true },
                 {},

                 {});
         });

2、ユーザーがグリッドデータを編集しようとしたときに使用されるコントローラーの編集メソッドは次のとおりです。

     [Authorize(Roles=@"MyDomain\SecurityLists\User1")]
        public ActionResult EditRecord(int id, string eligFactor)
        {
            bool success = false;
            var context = new EligibilityFactorDataContext();
            EligibilityControl eg = context.EligibilityControls.Single(p => p.id == id);

            eg.EligFactor = Convert.ToSingle(eligFactor);

            try
            {
                context.SubmitChanges();
                success = true;
                return Json(success);
            }
            catch (Exception e)
            {
                success = false;
                return Json(success);
                            }

        }

誰か教えてください。これを達成するのを手伝ってください。非常に感謝しています !

var context = new EligibilityFactorDataContext();


            var isAuth = true;
            int pageIndex = Convert.ToInt32(page) - 1;
            int pageSize = rows;
            int totalRecords = context.EligibilityControls.Count();
            int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
            var eligibilitycontrols = context.EligibilityControls.OrderBy(sidx + " " + sord).Skip(pageIndex * pageSize).Take(pageSize);
            var jsonData = new
            {
              total = totalPages,
              page =   page,
              records = totalRecords,
              userdata = isAuth,
              rows = (
                      from eligibilitycontrol in eligibilitycontrols
                      select new
                      {
                        id = eligibilitycontrol.id,
                        cell = new string[]  {
                                               eligibilitycontrol.id.ToString() ,
                                               eligibilitycontrol.CountryCode, 
                                               eligibilitycontrol.Node.ToString(), 
                                              Convert.ToSingle(eligibilitycontrol.EligFactor).ToString()}

                                             }).ToArray()
             };
          return Json(jsonData);
    }
4

1 に答える 1

2

ユーザーが認証されているかどうかのチェックを追加し、ユーザーが認証されているかどうかにかかわらずビューモデルのブール値をビューに渡し、これに基づいてナビゲーション ページャーを変更します。

var userIsAuth = '@Model.UserIsAuth' == 'true';
jQuery('#list').jqGrid().navGrid('#pager', { edit: (userIsAuth ? true : false), add: false, del: false, search: false, refresh: true },
      { url: '@Url.Action("EditRecord")', closeAfterEdit: true },
      {},    
      {});

したがって、コントローラーでは、同様の方法で UserData を定義する必要があります Ex

 userdata = new {ExampleName = ExampleValue},

次に、loadComplete: function() で

var myPassedUserData = $(this).getGridParam('userData');
var ExampleVariable = myPassedUserData.ExampleName

編集 - 三項演算を使用してコードを簡素化します。おそらく、url:userIsAuth bool を介してプロパティを無効にすることもできます。

于 2013-01-03T21:32:06.593 に答える