MVC路由从另一个视图调用一个视图

时间:2016-08-22 20:18:39

标签: asp.net-mvc routing

正如我之前的帖子中所解释的那样,我是MVC的新手,我正在开发一个网站。一切正常,除了我在route.config文件上做的小改动。我需要将用户定向到一个视图,该视图是从另一个视图上的按钮打开的,并且取决于父视图。这意味着不应该允许独立访问它。

将其编辑为更清晰。

这就是问题所在。 客户登录我的网站并查看他们的帐户活动页面,一旦他们有任何到期金额,他们可以选择付款。当他们点击付款按钮时,他们将被定向到付款网站,一旦完成,他们将被重定向回我的网站,他们会看到确认页面/视图。

所以URL现在就是这样。

http://www.examplesite.com/Homecontroller/Loginview/ - for login.

登录后,网址为

http://www.examplesite.com/Homecontroller/CustActview/

从付款网站返回后,该网址应与custAct视图相关,因为它与帐户相关,所以我希望它为

http://www.examplesite.com/Homecontroller/CustActview/successfulpaymentview

所以为了实现这个目的,我在route.config中添加了其他路由,但是添加它给了我另一个问题,现在如果我登录,则URL更改为

http://www.examplesite.com/Homecontroller/CustActview/CustActview 

所以我不知道如何处理这个问题。请帮忙。希望这很清楚。

Route.config

routes.MapRoute(
            name: "Properties",
            url: "{controller}/CustAcct/{action}/{id}",
            defaults: new
            {
                controller = "HomeController",
                action = "successfulpaymentview",
                id = UrlParameter.Optional
            }
        ); 
routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new
            {
                controller = "HomeController",
                action = "LoginView",
                id =
                    UrlParameter.Optional
            }
        );

1 个答案:

答案 0 :(得分:0)

在我看来,没有必要在路由中增加复杂性,以限制对该视图的直接访问。

也许,您应该尝试使用动作过滤器

除了那个评论之外,你在路线配置中定义了两个动作......

url:“{controller} / CustAcct / {action} / {id}”,

  • CustAcct {action}

尝试这样的事情:

routes.MapRoute(
            name: "Properties",
            url: "Home/CustAcct/{param1}/{param2}/..."
        ); 
routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new
            {
                controller = "Home",
                action = "Login",
                id = UrlParameter.Optional
            }
        );

<强> 更新

好的,我明白了!你RouteConfig.cs应该是:

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "AccounInfo-Success",
                url: "{controller}/AccounInfo/{action}/"
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }

和你的HomeController:

 public class HomeController : Controller {
        public ActionResult AccountInfo() {
            return View();
        }

        public ActionResult Success() {
            return View();
        }
    }