Asp.net mvc Actionfilter动态视图和模型加载

时间:2016-01-26 08:09:38

标签: c# asp.net-mvc actionfilterattribute

我有一个带家庭控制器的mvc项目

 public class HomeController : BaseController
 {
    [MyActionFilter]
    public  ActionResult Index(string id)
    {
        var model  = HttpContext.Items["model"] ;
        var viewname = HttpContext.Items["viewname"] as string;
        if (model != null)
            return View(viewname, model);

        model = GetDefaultModel(id);
        return View(model);
    }

}

然后我有一个动作过滤器

public class MyActionFilterAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var id = filterContext.ActionParameters["id"];
        List<IWillDoTheThing> myDoTheThings = LoadAllTheImplementationsOf<IWillDoTheThing>();
        var myObject = myDoTheThings.Where(i => i.IdISupport == id).First().ExecuteTheThing();
        filterContext.HttpContext.Items["viewname"] = myObject.ViewName;
        filterContext.HttpContext.Items["model"] = myObject.Model;

    }
   }

然后是一个接口和一个类

public interface IWillDoTheThing
{
    string IdISupport { get; set; }
    MyObject ExecuteTheThing();

}

public class MyObject
{
    public string ViewName { get; set; }
    public object Model { get; set; }
}

根据id,我加载viewname和model(从其他程序集动态)。所以使用这种方法,我可以更改主页没有任何大问题。我唯一的问题是,这是一个好方法还是有更好的方法来做到这一点。

帮助将不胜感激。

此致

0 个答案:

没有答案