2013-07-22 40 views
0

我搜索了相当一段时间,所以我很抱歉,如果这是一个重复的职位。Viewbag数据不能从控制器持续查看?

我想禁用jquery对话框上的保存按钮,如果用户没有足够的权限,由应用程序定义。但是,在将数据库中的权限更改为只读(因此禁用保存按钮)之后,我仍然能够保存更改。

我试图在我的控制器中的ViewBag对象中设置一个值,并返回一个局部视图。在控制器中的代码是:

Boolean blnReadOnlyPermissions = IdentityHelper.ReadOnly; 
if (blnReadOnlyPermissions) 
{ 
    ViewBag.ReadOnlyPermissions = '0'; 
} 
else 
{ 
    ViewBag.ReadOnlyPermissions = '1'; 
} 

在控制器中,我曾尝试双引号(“),整数值,与实际的文字(”真”,‘真’),都无济于事设置。对于ViewBag值的代码执行成功,我可以看到,ViewBag至少在控制器中设置

视图代码是:

function EditDialogFocus() { 
    var ReadOnlyPermissions = '@ViewBag.ReadOnlyPermissions'; 
    if (ReadOnlyPermissions == '0') { 
     $('#dialog-Edit').attr('disabled', true); 
     $('#btnSave').attr('disabled', true); 
    } else { 
     $('#dialog-Edit').attr('disabled', false); 
     $('#btnSave').attr('disabled', false); 
    } 
} 

jQuery的对话框是:

$('#dialog-Edit').dialog({ 
    open: EditDialogFocus, 
    autoOpen: false, 
    width: 1000, 
    resizable: false, 
    title: 'Edit Customer', 
    modal: true, 
    position: ['center', 'middle'], 
    buttons: [ 
     { 
      id: "btnCancel", 
      text: "Cancel", 
      click: function() { $(this).dialog("close"); } 
     }, { 
      id: "btnSave", 
      text: "Save", 
      click: function() { UnloadForm(); SaveCustomer(); } 
     } 
    ] 
}); 

有什么建议吗? 感谢您的帮助。

+0

如果你在'var ReadOnlyPermissions ='0'上更改'var ReadOnlyPermissions ='@ ViewBag.ReadOnlyPermissions';''会不会像预期的那样工作? 什么'ReadOnlyPermissions'等于分配后? – Dima

+0

@Dima - 我也尝试过,没有成功。 ReadOnlyPermissions等于0,当我把它分配给var后立即放入一个警告框 – user2607902

+0

你是什么意思,说'没有成功'?这是否意味着你的JS不能使用硬编码变量的值? – Dima

回答

0

试试这个

var ReadOnlyPermissions= @(ViewBag.ReadOnlyPermissions); 
+0

感谢您的回复。该建议不起作用,并导致错误消息“property {jquery dialog function name}的值为空或未定义,而不是函数对象。 – user2607902

+0

我认为问题是在禁用/启用按钮,看看这个问题http://stackoverflow.com/questions/17795309/enable-and-disable-button/17795394?noredirect=1#comment25961732_17795394 – UsmanAzam

+0

谢谢对于这个建议。我尝试使用:$('#btnSave')。prop(“disabled”,“disabled”);并且该对象不支持属性或方法'prop' – user2607902

0

您可以使用TempData["hello"] = "My value" TempData的可以在多个控制器动作中使用。

+0

只需谨慎一点,TempData仅适用于请求+1,页面上的刷新将会终止它(实际上,它在第一次访问时被终止,因此您可以' t访问它两次)。 TempData.Keep()可能会有所帮助。此外,RedirectResult和RedirectToRouteResult始终在内部调用TempData.Keep()。 – Robert

+0

当ViewBag没有工作时,我有实例,但是TempData做到了。不知道刷新是否会杀死它,我需要测试一下。 –

+1

对象生命周期:ViewBag/ViewData:request,TempData:request + 1 – Robert