有没有办法用强制参数创建ASP.NET MVC属性?
[MyPersonalAttribut(MyMandatoryValue="....")]
public ActionResult Index()
{
return View();
}
谢谢,
答案 0 :(得分:0)
简单的方法是为索引方法
设置一个不可为空的参数 public ActionResult Index(int id)
{
return View();
}
需要有效的int来导航
答案 1 :(得分: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");
}
答案 2 :(得分: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;
}
}
然后,如果在使用如下所示的属性时未提供参数,则会收到编译错误:
这将有效:
[MyPersonalAttribute("some value")]
public ActionResult Index()
{
return View();
}
这会给你一个编译错误:
[MyPersonalAttribute()]
public ActionResult Index()
{
return View();
}