Фильтры ASP.NET MVC: Как установить Viewdata для Dropdown на основе параметра действия - PullRequest
0 голосов
/ 05 мая 2010

Я загружаю объект 'Member' из его идентификатора в данных маршрута.

[ListItemsForMembershipType(true)]
public ActionResult Edit(Member someMember) {...}

Атрибут в действии загружает элементы списка типов членства для выпадающего списка и вставляет его в viewdata. Это хорошо для форм добавления и поиска форм (он получает все активные элементы), но мне нужно, чтобы атрибут выполнялся на основе значения someMember.MembershipTypeId, потому что его текущее значение всегда должно присутствовать при загрузке элемента (то есть всех активных элементов плюс один из загруженной записи).

Итак, вопрос в том, каков стандартный шаблон для этого? Как мой атрибут может принять значение или я должен загружать данные представления для раскрывающегося списка в супертипе контроллера или во время привязки модели или чего-то еще?

Теперь он входит в атрибут, потому что в противном случае код для установки viewdata дублировался бы при каждом использовании в каждом действии.

1 Ответ

2 голосов
/ 05 мая 2010

Вы можете получить доступ к объекту модели внутри фильтра MVC OnActionExecuting :

public class ListItemsForMembershipType : ActionFilterAttribute
{
    // ...

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
        Member model = filterContext.ActionParameters["someMember"] as Member
        // do your stuff, insert data into ViewData            
    }
}
...