问题背景:
我有一个包含名为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
}
答案 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”] =值;
//重定向到某个操作