[asp.net-mvc]自定义控制器为 MS MVC 新手

标签: Asp.net-MVC .Net
发布时间: 2017/3/25 4:33:18
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

想要开始使用 MVC MS 的执行,我已经在果酱......

我有有一条路线就像这样︰

  routes.MapRoute( "Custom", // Route name
           "RightHere/{entryDate}", // URL with parameters
           new { controller = "RightHere", action = "GetDate" } // Parameter defaults

           ); 

相应的控制器 (RightHereController) 的行动看起来像这样︰

 public ActionResult GetDate(DateTime date)
    {


             try
             {
                 ViewData["Date"] = date;
                 return View();
             }
             catch
             {
                 return View();
             }
    }

视图︰

<h2>RightHere</h2>
<p><%= Html.Encode(ViewData["Date"]) %></p>

足够简单。但得到死亡的橙色屏幕时使用 URL /RightHere/GetDate/1-1-2009

:

The parameters dictionary contains a null entry for parameter 'date' of non-nullable type 'System.DateTime' for method 'System.Web.Mvc.ActionResult GetDate(System.DateTime)'

你更多的终身 Ms MVC 宣传员需要告诉我我缺少:)

解决方法 1:

你实际上有两个问题。 第一个问题是你上面提到的 URL 不匹配您创建的路线。 第二个问题在于你的路线和你的行动并不完全匹配。

你对这你的问题中的 URL:

/ 跨海大桥/GetDate/1-1-2009

它需要是这︰

/ 跨海大桥/1-1-2009

如果你希望它是后者,然后您需要更改你的路线为︰

routes.MapRoute(
    "Custom", 
    "RightHere/GetDate/{entryDate}", 
    new { controller = "RightHere", action= "GetDate" }
);

你有这为您的行动︰

public ActionResult GetDate(DateTime date)
{
    ...
}

它需要这一点,以匹配您的路线︰

public ActionResult GetDate(DateTime entryDate)
{
    ...
}

除此之外,你是好去。 只要确保你有路线在最上面的默认路由。 我可以推荐另一件事会帮助是通过将约束添加到你的路线,例如︰

routes.MapRoute(
    "Custom", 
    "RightHere/{entryDate}", 
    new { controller = "RightHere", action= "GetDate" }, 
    new { entryDate = @"\d{2}-\d{2}-\d{4}"}
);

这将确保入境日期已过,是在正确的格式。

赞助商