参数字典包含非空类型的参数“ id”的空条目 [英] The parameters dictionary contains a null entry for parameter 'id' of non-nullable type
问题描述
我正在尝试通过默认路径中的 id
参数从数据库中检索数据:
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中,我试图基于route 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中需要一个整数,例如:/ Home / 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?).
如果您不想在网址中添加页面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);
}
只需确保处理title参数为空/空的情况。通常,您应该使用Mvc框架中已经存在的帮助程序/扩展程序来构建URL。
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)
或在您更高级的帮助器中,
or in your more advanced helper,
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());
}
这篇关于参数字典包含非空类型的参数“ id”的空条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!