参数字典包含参数的空条目

时间:2013-04-09 03:58:56

标签: c# asp.net-mvc asp.net-mvc-routing

我有两个视图页面使用相同的控制器和模型作为更改页面布局的方法,但我在显示第二页时遇到问题。这是我的错误消息:The parameters dictionary contains a null entry for parameter id of non-nullable type for method system.web.mvc.actionaresult ListView(int32) in UserController

不确定导致问题的原因我在第一个视图页面(工作)使用了相同的代码,只是更改了视图布局。

第一次观看

<div>
<a href="/Roster/ListView">Click Here for List view</a>
</div>

<section id="users" data-bind="foreach: Users">
    <div id="nameImage">
        <figure id="content">
            <img width="158" height="158" alt="Gravatar" data-bind="attr:{src: GravatarUrl}"/>
            <figcaption>
                <a title="Email" id="emailIcon" class="icon-envelope icon-white" data-bind="attr:{'href':'mailto:' + Email()}"></a>
                <a title="Profile" id="profileIcon" class="icon-user icon-white"></a>
            </figcaption>
        </figure>
        <p data-bind="text:Name"></p>
        </div>
    </section>
</section>

列表视图

<div class="accordion-inner">
<div data-bind="foreach: Users">
    <div>
        <img width="158" height="158" alt="Gravatar" data-bind="attr:{src: GravatarUrl}"/>
        <p data-bind="text:Name"></p>
    </div>
</div>

控制器

 public ActionResult View(int id)
    {
        // get the menu from the cache, by Id
        ViewBag.SideBarMenu = SideMenuManager.GetRootMenu(id);
        ViewBag.UserApiURL = "/api/User/" + id.ToString();
        return View(); 
    }

    public ActionResult ListView(int id)
    {
        // get the menu from the cache, by Id
        ViewBag.SideBarMenu = SideMenuManager.GetRootMenu(id);
        ViewBag.UserApiURL = "/api/User/" + id.ToString();
        return View();
    }
}

Api控制器

private UserService _userService = new UserService();

    public IEnumerable<User> Get(int? id)
    {
        if (id.HasValue)
        {
            return _userService.GetUsers(id.Value);
        }
        throw new HttpResponseException(HttpStatusCode.NotFound);
    }

2 个答案:

答案 0 :(得分:2)

您撰写以下链接href="/Roster/ListView"但行动 ListView 需要parameter id,此处缺少该链接。

答案 1 :(得分:2)

网址/Roster/ListView缺少ID值。你需要:

  1. 将网址更改为/Roster/ListView/123
  2. 通过将类型从int更改为int?,更改操作方法以允许可为空的整数。然后在action方法中,您需要检查id参数是否为null并适当处理,例如返回错误或忽略id。