我是JQgrid和mvc3的新手。我有一个非常基本的jQgrid,具有编辑功能。
我希望在JqGrid加载时为某个用户(由AD验证)禁用jqgrid.navgrid中的编辑链接,并为具有不同角色的其他用户启用它。
我能够限制用户编辑网格数据,但这还不够。我希望用户甚至不能在JqGrid中看到可编辑的链接。
以下是我在视图中的JqGrid(index.cshtml):
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);
}
答案 0 :(得分:2)
添加一个检查用户是否经过身份验证,如果用户经过身份验证,则将viewmodel中的bool传递给您的视图,并根据此修改导航寻呼机。
实施例
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
编辑 - 使用三元操作来简化代码。可能也可以通过userIsAuth bool禁用url:
属性。