获取模型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)。在任何情况下,上面的代码应该足以让您继续。

希望有帮助!

相关内容

  • 没有找到相关文章

最新更新