我的控制器中几乎没有使用参数的动作。
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合作吗?