且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

参数字典包含非空类型的参数“ id”的空条目

更新时间:2023-01-13 15:30:23

要调用该操作,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());
 }