动作参数和视图模型之间的区别是什么,影响路由

时间:2015-07-29 06:33:39

标签: c# asp.net-mvc-5 asp.net-mvc-routing

我的控制器中几乎没有使用参数的动作。

public async Task<ActionResult> GetData(string id, string start, string end, string targetId)

public async Task<ActionResult> GetOtherData(string id, string start, string end)

.......

为此,我必须制作自定义路线。

我的问题:

使用带有上述参数的动作和使用像这样的ViewModel有什么区别:

public class DataViewModel
{
     public string id { get; set; }
     public string start { get; set; }
     public string end { get; set; }
     public string targetId { get; set; }
}

然后

public async Task<ActionResult> GetData(DataViewModel model)

如果我使用ViewModel作为我的动作的参数,我是否仍然需要为它定义路线,否则MVC会自动理解它?

目前有4条路线很乱,可能我做错了,因为有些路线没有正确匹配。

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


        routes.MapRoute(
            name: "ViewSingle",
            url: "{controller}/{action}/{id}/{start}/{end}/{targetId}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, start = UrlParameter.Optional, end = UrlParameter.Optional, targetId = UrlParameter.Optional }
        );

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


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



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

另一件事是,也许你可以从上面的路线配置中找到它,我不确定我是否正确理解路由以及应该如何完成。

这就是为什么我想知道我是否可以通过使用ViewModel而不是参数来摆脱路由。

另一件事是如果我使用ViewModels,我还可以共享特定项目的网址吗?我认为它不能与ViewModel合作吗?

0 个答案:

没有答案