提供空URL参数时,重定向到其他MVC控制器?

时间:2015-06-09 20:09:17

标签: c# asp.net-mvc asp.net-mvc-4

问题背景:

我有一个包含名为pageNo的参数的URL,该参数通过名为Events的方法发送到名为FutureEvents的控制器。这与分页一起用于确定需要显示的视图的页码。这是URL:

http://localhost:xxxxx/Events/FutureEvents?pageNo=1

问题:

如果用户手动输入网址,不提供提供网址中的网页编号参数,例如:

http://localhost:51025/Events/FutureEvents

然后显示ASP错误消息:

  

参数字典包含参数' pageNo'的空条目。非可空类型的System.Int32'方法   ' System.Web.Mvc.ActionResult FutureEvents(Int32)'

这是有道理的,因为参数为null。当用户尝试呼叫Home控制器并Index时,我想要做的是将用户重定向到另一个控制器(在这种情况下是我的FutureEvents控制器和Events方法)带有pageNo参数空的方法。

这是我目前的路线:

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

Home控制器及其索引方法 - 这是我想要重定向到的。

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

使用FutureEvents方法的Events控制器:

 [HttpGet]
 public ActionResult FutureEvents(int pageNo)
 {
     //code
 }

3 个答案:

答案 0 :(得分:3)

如果在函数中传递参数,我们需要先放置或设置初始值。

int pageNo = 0还是int?您做生意

   [HttpGet]
     public ActionResult FutureEvents(int pageNo = 0)
     {
         //code
     }

所有其他功能没有参数正常打开。

答案 1 :(得分:2)

您必须定义两条路线,一条带参数(非可选),另一条没有参数。

routes.MapRoute( // because id is required, route will be skipped
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Events", action = "FutureEvents"}
    );

routes.MapRoute( // catch all routes that doesn't match the others.
        name: "CatchAll",
        url: "{*everything}",
        defaults: new { controller = "Home", action = "Index" }
    );

您可以看到more informations的答案。

答案 2 :(得分:0)

或者如果您想使用会话传递页码 这样他们就不用担心用户编辑页码了

会话[ “PAGENUMBER”] =值;

//重定向到某个操作