我的自定义过滤器中有一个这样的控制器
[GetBindValueFilter]
public ActionResult EditArtist([Bind(Include = "ID,ArtistName,ArtistDescription,CoverLink")]Artist modelArtist)
{
return View(modelArtist);
}
我的自定义过滤器获取绑定值是
public class GetBindValueFilterAttribute : ActionFilterAttribute
{
private string keysString;
public GetBindValueFilterAttribute(string keys)
: base()
{
this.keysString = keys;
}
public override void OnActionExecuting(ActionExecutingContext filterContext);
{
//I want to get result like this
var bindPropertyList="ID,ArtistName,ArtistDescription,CoverLink"
// I try this code but it don't work
//var modelList = filterContext.ActionParameters.ToList();
//foreach (var model in modelList)
//{
// var bAttri = model.Value.GetType().GetCustomAttributes(typeof (BindAttribute), false);
//
//}
//
}
}
帮我解决这个问题。我希望得到像这样的结果
var bindPropertyList="ID,ArtistName,ArtistDescription,CoverLink"
答案 0 :(得分:0)
您可以使用filterContext.ActionDescriptor.GetParameters()
获取控制器操作的所有输入参数。然后,您可以使用与执行相同的方式查询每个参数的属性(使用GetCustomAttributes
)。
例如,此动作过滤器将正确提取modelArtist参数的包含列表:
public class GetBindValueFilterAttribute : ActionFilterAttribute
{
public string KeysString { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
foreach (var inputParameter in filterContext.ActionDescriptor.GetParameters())
{
var bindAttribute = inputParameter.GetCustomAttributes(typeof(BindAttribute), false)
.Cast<BindAttribute>()
.FirstOrDefault();
if (bindAttribute != null) this.KeysString += " " + bindAttribute.Include;
}
}
}
作为旁注,您可能需要重新考虑GetBindValueFilterAttribute
以支持具有多个参数的控制器操作。在这种情况下,可能不是提取字符串,而是提取字典(parameterName-keysStrings)。无论如何,上面的代码应该足以让你继续。
希望有所帮助!