有没有办法创建一个带有强制参数的 ASP.NET MVC 属性?
[MyPersonalAttribut(MyMandatoryValue="....")]
public ActionResult Index()
{
return View();
}
谢谢,
有没有办法创建一个带有强制参数的 ASP.NET MVC 属性?
[MyPersonalAttribut(MyMandatoryValue="....")]
public ActionResult Index()
{
return View();
}
谢谢,
你可以试试这样的
动作过滤器
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");
}
您可以通过在 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();
}
简单的方法是为索引方法设置一个不可为空的参数
public ActionResult Index(int id)
{
return View();
}
需要一个有效的 int 才能在那里导航