Вы не можете / не должны получать доступ к ViewData или любой другой информации, связанной с HttpContext, в поставщике метаданных модели.
ОБНОВЛЕНИЕ:
После того, как обновленный вопрос начинает иметь смысл, давайте обновим ответ:
public class CheckMetadataAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// get model?
var result = filterContext.Result as ViewResultBase;
if (result != null)
{
var model = result.Model;
if (model != null)
{
// get metadata for model (you have a single model, no idea what you meant by "for each model" in your question)
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, model.GetType());
if (metadata.DisplayName == "foo bar")
{
// set viewdata if metadata X exists
filterContext.Controller.ViewData["foo"] = "bar";
}
}
}
}
}
Очевидно, что использование ViewData
в приложении ASP.NET MVC - это то, против чего я абсолютно рекомендую. ViewData
слабо набрано. Чего бы вы ни пытались достичь (было бы неплохо, если бы вы объяснили, в чем ваша цель), не используйте ViewData, используйте модели представлений и строго типизированные представления.
Лично у меня аллергия на такие вещи, как ViewBag / ViewData в приложениях ASP.NET MVC. Когда я проверяю код и вижу людей, использующих их, я знаю, что они сделали что-то не так.