Пользовательский связыватель модели, который будет работать только в одной области приложения MVC

Я использовал пользовательские связыватели моделей, настроенные в файле Global.asax. Можно ли использовать эту подшивку модели только в определенных областях приложения?

public class CreatorModelBinder : IModelBinder
{

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        //what logic can i put here so that this only happens when the controller is in certain area- and when it's not in that area- then the default model binding would work
        var service = new MyService();
        if (System.Web.HttpContext.Current != null && service.IsLoggedIn)
            return service.Creator;
        return new Creator {};
    }
}

person ek_ny    schedule 16.08.2012    source источник


Ответы (2)


Если вы хотите вызвать связыватель модели по умолчанию, вы должны быть производными от DefaultModelBinder вместо прямой реализации интерфейса IModelBinder.

А потом:

public class CreatorModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var area = controllerContext.RouteData.Values["area"] as string;
        if (string.Equals(area, "Admin"))
        {
            // we are in the Admin area => do custom stuff
            return someCustomObject;
        }

        // we are not in the Admin area => invoke the default model binder
        return base.BindModel(controllerContext, bindingContext);
    }
}
person Darin Dimitrov    schedule 16.08.2012

Попробуйте использовать следующую логику:

if(controllerContext.RouteData.DataTokens["area"].ToString()=="yourArea")
        {
            //do something
        }
person Oleg Yevteyev    schedule 16.08.2012