2012-07-11 102 views

回答

0

最簡單的方法是有index方法

public ActionResult Index(int id) 
    { 
    return View(); 
    } 

不可爲空的參數需要一個有效的int導航有

+0

我知道,但我想一個屬性 – 2012-07-11 06:00:30

+0

@克里斯-I *瓦你*你想要一個屬性? – 2012-07-11 13:53:45

0

你可以試一下像這樣,

動作過濾器

public class MandatoryAttribute: FilterAttribute, IActionFilter 
{ 
    private readonly string _requiredField; 

    public MandatoryAttribute(string requiredField) 
    { 
     _requiredField = requiredField; 
    } 

    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
    } 

    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var val = filterContext.Controller.ValueProvider.GetValue(_requiredField); 

     if (val == null || string.IsNullOrEmpty(val.AttemptedValue)) 
      throw new Exception(string.Format("{0} is missing"), 
          _requiredField); 
    } 
} 

行動

[Mandatory("param")] 
public ActionResult MyTest() 
{ 
    return Content("OK"); 
} 
+0

是的,但它在運行時。我想在彙編時間。 – 2012-07-11 16:40:35

+0

我不明白你編譯的時間是什麼意思? – VJAI 2012-07-11 16:44:16

+0

如果強制性參數不存在,我將該屬性放在操作的頂部,我收到一個編譯錯誤。 – 2012-07-13 08:28:03

0

您可以輕鬆地做到這一點的只有一個在它有一個參數的構造屬性。就像這樣:

public class MyPersonalAttribute : Attribute 
{ 
    public object MyMandatoryValue { get; private set; } 

    // The only constructor in the class that takes one argument... 
    public MyPersonalAttribute(object value) 
    { 
     this.MyMandatoryValue = value; 
    } 
} 

然後,如果你會得到一個收到一個編譯錯誤,如果你沒有采用像下面的屬性時的說法:

這將工作:

[MyPersonalAttribute("some value")] 
public ActionResult Index() 
{ 
    return View(); 
} 

這會給你一個編譯錯誤:

[MyPersonalAttribute()] 
public ActionResult Index() 
{ 
    return View(); 
}