MVC 3的参数词典共包含非可空类型的参数'ID'无效项 [英] MVC 3 The parameters dictionary contains a null entry for parameter 'id' of non-nullable type

查看:222
本文介绍了MVC 3的参数词典共包含非可空类型的参数'ID'无效项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的完全的新MVC所以请与我裸露而我试图解释这个问题。我试图通过编号从我的数据库中检索数据在我的默认路由参数:

I am completely new to MVC so please bare with me while i try to explain the problem. I'm trying to retrieve data from my db via the id parameter in my default route:

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

在此的ActionResult我试图呈现一个自定义用户控件,基于路径ID参数,以便我检索的请求的页面的相关数据

In this ActionResult I'm trying to render a custom user control, based on the route id parameter so that I retrieve the relevant data for the page that's requested

public ActionResult InitPageNav(int id)
{
      PageModel page = PageNavHelper.GetPageByID(id);
      return PartialView("UserControls/_PageNavPartial", page);
}

编辑*

public static MvcHtmlString CreateMenuItems(this HtmlHelper helper, string action, string text)
{
     var menuItem = new TagBuilder("li");
     var link = new TagBuilder("a");

     //Get current action from route data
     var currentAction = (string)helper.ViewContext.RouteData.Values["action"];
     link.Attributes.Add("href", string.Format("/Home/{0}", action));

     if (currentAction == action)
     {
         menuItem.AddCssClass("selected");
         link.Attributes.Remove("href");
         link.Attributes.Add("href", string.Format("/Home/{0}", currentAction.ToString()));
     }

     link.SetInnerText(text);
     menuItem.InnerHtml = link.ToString();

     return MvcHtmlString.Create(menuItem.ToString());
 }

不过,我不断收到错误:

But I keep getting the error:

参数词典共包含参数非可空类型的ID

任何人都可以发现我要去哪里错了吗?

Can anyone spot where I'm going wrong?

感谢您

推荐答案

要调用操作,需要在URL中的一个整数,像这样:/主页/ InitPageNav / 1

To call the action, an integer is needed in the URL, like so: /Home/InitPageNav/1

如果不是这样,你改变操作方法以允许空整型(但没有任何意义,除非你有一个默认的页面,您可以获取如果没有ID被赋予?)。

Either that or you change the action method to allow for a nullable integer (but that doesn't make sense, unless you have a default page you can retrieve if no id was given?).

如果您不想在URL页面的id,你需要别的东西来识别页面,就像标题??

If you don't want a page id in the url, you need something else to identify the page, like the title??

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{title}", // URL with parameters
            new { controller = "Home", action = "Index", title = UrlParameter.Optional } // Parameter defaults
        );

和动作:

public ActionResult InitPageNav(String title)
{
      PageModel page = PageNavHelper.GetPageByTitle(title);
      return PartialView("UserControls/_PageNavPartial", page);
}

只要确保处理的情况下标题参数为空/空。一般应该使用助手/扩展已经美元的MVC框架p $ psent构建您的网址。

Just make sure to handle the case where the title parameter is empty/null. And generally you should use the helpers/extensions already present in the Mvc framework for building your urls.

@Html.ActionLink("Link text", "action", "controller", new { title = "whatever" }, null)

或你的更先进的帮手,

public static MvcHtmlString CreateMenuItems(this UrlHelper url, string action, string text)
{
     var menuItem = new TagBuilder("li");
     var link = new TagBuilder("a");

     //Get current action from route data
     var currentAction = (string)helper.RequestContext.RouteData.Values["action"];
     link.Attributes.Add("href", url.Action(action, "home", new { title = "whatever" }));

     if (currentAction == action)
     {
         menuItem.AddCssClass("selected");
     }

     link.SetInnerText(text);
     menuItem.InnerHtml = link.ToString();

     return MvcHtmlString.Create(menuItem.ToString());
 }

这篇关于MVC 3的参数词典共包含非可空类型的参数'ID'无效项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆