0

有没有办法创建一个带有强制参数的 ASP.NET MVC 属性?

[MyPersonalAttribut(MyMandatoryValue="....")]
public ActionResult Index()
{

    return View();
}

谢谢,

4

3 回答 3

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");
}
于 2012-07-11T12:40:43.663 回答
0

您可以通过在 Attribute 中只有一个带有一个参数的构造函数来轻松地做到这一点。像这样:

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;
    }
}

然后,如果在使用 Attribute 时未提供参数,则会收到编译错误,如下所示:

这将起作用:

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

这会给你一个编译错误:

[MyPersonalAttribute()]
public ActionResult Index()
{
    return View();
}
于 2013-08-15T14:06:28.197 回答
0

简单的方法是为索引方法设置一个不可为空的参数

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

需要一个有效的 int 才能在那里导航

于 2012-07-11T05:47:15.117 回答