簡體   English   中英

在模型ASP.NET MVC中獲取綁定屬性列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM