如何在ASP.NET MVC中通过控制器传递参数?

时间:2018-03-17 05:18:19

标签: c# asp.net-mvc entity-framework

我尝试在控制器中创建一个方法,该方法将通过url参数生成totalAmount并显示视图中的数量。我有一个模型GetTotalAmount,它在过滤数据后返回一个int值。

// GET: Product
public ActionResult Index(int inOrOut=0,string startDate="",string endDate="")
{
     ViewBag.totalAmount = new ProductModel().GetTotalAmount(inOrOut,startDate,endDate);
     return View();
}

如果我点击以下网址..........

http://localhost:50573/Product/index/1/2018-03-01/2018-03-31

返回以下错误............

  

HTTP错误404.0 - 未找到
  您要查找的资源已被删除,名称已更改或暂时不可用

我将如何得到我期望的观点?

1 个答案:

答案 0 :(得分:2)

两种最快的解决方案:

解决方案#1 - 更正网址参数格式

我假设您在App_Start \ RouteConfig.cs

中有默认路由配置
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

根据此路由,您需要使用

命中以下网址
http://localhost:50573/Product/index/1?startdate=2018-03-01&enddate=2018-03-31

解决方案#2 - 将新路线图添加到配置

您仍然可以使用您提供的网址点击您的控制器。

http://localhost:50573/Product/index/1/2018-03-01/2018-03-31

为了做到这一点,你需要在你的路线上添加新的地图,所以整个RegisterRoutes方法应该是这样的

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

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

        routes.MapRoute(
            name: "Product",
            url: "{controller}/{action}/{inOrOut}/{startDate}/{endDate}",
            defaults: new { controller = "Product", action = "Index", inOrOut = 0,
                startDate = "",
                endDate = ""
            }
        );
    }

我建议您阅读有关路由的更多信息 HERE