[英]Get bind atribute list in model asp.net mvc
我的自定義過濾器中有一個這樣的控制器
[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"
您可以使用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)而不是提取字符串。 無論如何,上面的代碼應該足以讓您繼續。
希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.