首页 新闻 会员 周边

ASP.NET MVC 用扩展方法 扩展Action如何返回 View()?

0
悬赏园豆:80 [已解决问题] 解决于 2015-09-13 16:21

原控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    { 
        // do something 
        return View();
    }

}        

使用扩展方法 扩展 Index():

public static class HomeControllerExtensions
{
    public static ActionResult Index(this HomeController hc,string viewName)
    { 
        // do something 
        return View(viewName);//此处如何构建一个ViewResult ?,试了好几个方法都不行,脑子转不过来弯了,求指点一下!
    }

}   
ChixTech的主页 ChixTech | 初学一级 | 园豆:171
提问于:2015-09-10 22:43
< >
分享
最佳答案
1

首先自己写一个方法:

         private ActionResult View(ModelBase model, string main, string box = "list")
        {
            model.views["box"] = box;
            model.views["layout"] = "~/main/control/view/user/actor.aspx";
            model.views["main"] = "~/main/control/view/user/" + main;
            string viewFile = model.ajax ? model.views["main"] : model.views["layout"];
            return base.View(viewFile, model);
        }

使用上面的方法:

 public ActionResult enterprise_selectPopup()
        {
            var model = new ActorModel();


            return View(model, "enterprise_selectPopup.aspx");

        }

 

上面的方法是我们项目中的使用的,这样可以实现你的多视图返回了,作为你的参考,希望对你有帮助。

收获园豆:30
IT小伙儿 | 初学一级 |园豆:11 | 2015-09-11 14:52

谢谢,由于我这有点特殊,不能直接修改源代码,只能进行扩展(插件式的方式)!。

ChixTech | 园豆:171 (初学一级) | 2015-09-11 15:54
其他回答(3)
0

怎么调用Action method是由ActionInvoker决定的,默认的Action Invoker对方法有个要求:The method must not be static。所以你一定要这个功能的话,要写自己的Action Invoker替换掉默认的Action Invoker。

收获园豆:20
hsdtt | 园豆:293 (菜鸟二级) | 2015-09-11 05:50

这个不行哦,无法访问哦!我最开始就是这么想的...

支持(0) 反对(0) ChixTech | 园豆:171 (初学一级) | 2015-09-11 09:02

看来我思路错了!

支持(0) 反对(0) ChixTech | 园豆:171 (初学一级) | 2015-09-11 09:39
0

为什么要这么扩展?怎么会有这种需求?一般对mvc的扩展都是用filter吧?

收获园豆:20
顾晓北 | 园豆:10844 (专家六级) | 2015-09-11 09:13

好吧,其实我就是想给 Index Action 加一个参数,可以根据视图名称显示不同视图,因为我有A、B两个视图,Model一样,就是View层排版不一样!我想用 Html.Action 调用时,指定视图名称。 

前提不在 原HomeController 里修改?

给我介绍个方案?

 

支持(0) 反对(0) ChixTech | 园豆:171 (初学一级) | 2015-09-11 09:38
0

不修改源码的话,弄一个全局拦截器。判断是/Home/Index的话,返回请求的viewName

收获园豆:10
不夜橙 | 园豆:253 (菜鸟二级) | 2015-09-11 17:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册