代码之家  ›  专栏  ›  技术社区  ›  William Niu

System.InvalidcastException:在ASP.NET MVC局部视图中

  •  0
  • William Niu  · 技术社区  · 14 年前

    在控制器中:

    public ActionResult Index()
    {
        ViewData["page"] = 0;
        return View(data);
    }
    
    public ActionResult More(long page = 0)
    {
        ViewData["page"] = page;
        return View(data);
    }
    

    所以,我有两个视图:index.aspx和more.aspx。我创建了一个局部视图(partial view.ascx),用于两个视图。在局部视图中,它同时访问模型和视图数据。奇怪的是,当我试图将viewdata[“page”]强制转换为long时,其中一个视图的强制转换异常如下:

    System.InvalidCastException: Specified cast is not valid.
    

    我试着将viewdata[“page”]按如下方式强制转换:

    if ((long) ViewData["page"] > 1) { ... }
    

    long page = (long) ViewData["page"];
    if (page > 1) { ... }
    

    它们中的每一个都会在另一个视图中抛出一个强制转换异常(但不能同时抛出这两个视图)。

    index.aspx和more.aspx的一个区别是index.aspx使用母版页,more.aspx不使用母版页。

    有人能提出什么可能是错的建议吗?如果我需要提供更多细节,请让我知道。顺便说一句,我对C和ASP.NET MVC还很陌生。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Jon Skeet    14 年前

    这条线:

    ViewData["page"] = 0;
    

    正在将值设置为装箱 int . 你想把它拆开 long . 避免这种情况的最简单方法是 长的 首先:

    ViewData["page"] = 0L;
    

    …或使用 int 从您的页码开始。(你真的会得到超过 int.MaxValue 页面?)