Как я могу получить ссылку на свойство ModelState в моем ActionFilter? - PullRequest
1 голос
/ 12 сентября 2011

Это мой класс, который в основном используется для шаблона UnitForWork, т.е. сохраняет все в транзакции:

public class TestFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            if (filterContext.HttpContext == null)
                throw new NullReferenceException("null");
            else
            {
                ObjectContext objectContext = (ObjectContext)filterContext.HttpContext.Items
                                                                [ObjectContextManager.TestContext];

                if (objectContext != null)
                {
                    objectContext.SaveChanges();
                }
            }
        }
    }

Это работает отлично.Однако я также хочу убедиться, что он сохраняется, только если свойство ModelState.IsValid имеет значение true в моем методе действия.Как я могу это сделать?

1 Ответ

3 голосов
/ 12 сентября 2011

filterContext.Controller дает вам ссылку ControllerBase, а не Controller. если вы приведете его к Controller, он даст вам доступ к ModelState, который является общедоступным свойством класса контроллера, таким как

var val = ((Controller)filterContext.Controller).ModelState.IsValid; 

В настоящее время я понятия не имею, каковы последствия этого кастинга. Пожалуйста, уточните немного о последствиях перед использованием.
UPDATE:
Вы также можете получить доступ к свойству Modelstate, например

filterContext.Controller.ViewData.ModelState

и не требует кастинга

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...