2016-11-11 41 views
0

我試圖將值傳遞給自定義屬性從視圖方在ASP MVC。我處理的流程是這樣的 - >在Asp.net MVC我如何通過自定義屬性中的參數動態

  1. 填充員工詳細的保存按鈕
  2. 點擊
  3. 密碼窗口已打開
  4. 這個密碼,我想通過自定義屬性(卡住這裏)
  5. 條件將檢查密碼是否正確與否

下面是我的自定義屬性

public class LevelSecurityAttribute : ActionFilterAttribute 
{ 
    public string PageName {get;set;} 
    public string Password { get; set; } 
    public string InvokeMethod { get; set; } 

    public void LevelSecurity(string pagename,string invokemethod,string password) 
    { 
     this.PageName = pagename; 
     this.Password = password; 
    } 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //My Condition logic 
     base.OnActionExecuting(filterContext); 

     filterContext.Result=new RedirectResult("~/"+PageName+"/"+InvokeMethod); 
    } 
} 

下面是我的操作方法

[HttpPost] 
[ValidateAntiForgeryToken] 
[LevelSecurity(PageName = "DocumentType", InvokeMethod = "Index", Password = **Need pass Password from View side stuck here**)] 
public ActionResult Create(EmployeeMaster Employee,string password) 
{ 
    //Insert Employee Data if Password is Valid 
    return View(); 
} 

請朋友幫助我,如果我的觀念是錯誤的,請讓我知道。

回答

1

你不行。使用相同的ActionExecutingContext對象通過ActionParameters屬性獲取發佈的值。您不必在Create方法簽名中再次指定密碼參數,除非您也需要它。如果您不想對參數鍵進行硬編碼,請將其提升爲動作過濾器類中的屬性,就像您使用PageNameInvokeMethod所做的那樣。順便說一下,有很好的方法來做身份驗證授權與ASP.Net,從FormsAuthenticationASP .Net Identity

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 

    base.OnActionExecuting(filterContext); 

    var password = filterContext.ActionParameters.ContainsKey("password") 
       ? filterContext.ActionParameters["password"] : null; 
    .... 

} 
+0

換句話說,你*不能*傳遞密碼,但你可以訪問請求上下文並從那裏獲取值。 –

+0

是的......無論如何,我不認爲OP會在這種情況下取​​得任何成功。客戶是否應該在每次請求時都傳遞密碼? –

+0

感謝您的回覆 –

相關問題