Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC控制器中的重载Index()方法_Asp.net Mvc_Vb.net_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc MVC控制器中的重载Index()方法

Asp.net mvc MVC控制器中的重载Index()方法,asp.net-mvc,vb.net,asp.net-mvc-3,Asp.net Mvc,Vb.net,Asp.net Mvc 3,我想访问/Blog和/Blog/1,其中“1”是博客的ID。这是我的密码: ' ' GET: /Blog/ Function Index() As ViewResult Return (View(db.Blogs.ToList())) End Function ' ' GET: /Blog/(Integer) Function Index(id As Integer) As ViewResult Dim

我想访问/Blog和/Blog/1,其中“1”是博客的ID。这是我的密码:

    '
    ' GET: /Blog/

    Function Index() As ViewResult
        Return (View(db.Blogs.ToList()))
    End Function

    '
    ' GET: /Blog/(Integer)

    Function Index(id As Integer) As ViewResult
        Dim blog As Blog = db.Blogs.Find(id)
        Return View("Details", "_MyLayout", blog)
    End Function
它给出了错误:

“/”应用程序中出现服务器错误

控制器类型上操作“索引”的当前请求 “BlogController”在以下操作方法之间不明确: 类型上的System.Web.Mvc.ViewResult Index() GemcoBlog.GemcoBlog.BlogController System.Web.Mvc.ViewResult GemcoBlog.GemcoBlog.BlogController类型上的索引(Int32)

描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源

异常详细信息:System.Reflection.AmbiguousMatchException: 对控制器类型“BlogController”的操作“索引”的当前请求 以下操作方法之间不明确: 类型上的System.Web.Mvc.ViewResult Index() GemcoBlog.GemcoBlog.BlogController System.Web.Mvc.ViewResult GemcoBlog.GemcoBlog.BlogController类型上的索引(Int32)

源错误:

在执行过程中生成了未处理的异常 当前web请求。关于货物来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常

如何重载Index()方法

编辑:

我也在尝试这样将它们结合起来:

    '
    ' GET: /Blog/

    Function Index(id As Integer) As ViewResult
        If (id) Then
            Dim blog As Blog = db.Blogs.Find(id)
            'Return View(blog)
            Return View("Details", "_MyLayout", blog)
        Else
            Return (View(db.Blogs.ToList()))
        End If
        'Return View(db.Blogs.Where(Function(x) x.Name = "Test").ToList())
    End Function
但是,我得到的错误是:

“/”应用程序中出现服务器错误

参数字典包含的参数“id”为空 方法“System.Web.Mvc.ViewResult”的不可为空类型“System.Int32” “Blog.Blog.BlogController”中的索引(Int32)”。可选的 参数必须是引用类型、可为null的类型或声明为 可选参数。参数名称:参数

描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源

异常详细信息:System.ArgumentException:参数字典 包含不可为null的类型的参数“id”的null项 中“System.Web.Mvc.ViewResult Index(Int32)”方法的“System.Int32” 'Blog.Blog.BlogController'。可选参数必须是 引用类型、可为null的类型或可声明为可选类型 参数参数名称:参数

源错误:

在执行过程中生成了未处理的异常 当前web请求。关于货物来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常


不能在同一控制器上使用同一HTTP谓词访问两个操作。因此,要么更改操作名称,要么必须使用不同的HTTP动词消除歧义。例如:

<HttpPost>
Function Index(id As Integer) As ViewResult
    Dim blog As Blog = db.Blogs.Find(id)
    Return View("Details", "_MyLayout", blog)
End Function

由于它不可为null,因此它会自动假定您在默认情况下提供了一个id。将Id设为可为空的整数,它将适用于两个URL


函数索引(id为Nullabe(整数的))作为ViewResult

有几种方法可以做到这一点。最简单的方法是将第一个方法重命名为“ShowBlog”或任何您想要的方法,然后在global.asax中设置一个路由,该路由不带参数地路由到/Blog路由

例如(在c中):

确保MapRoute位于默认路由之前


要使第二个方法工作,您需要将id设置为null,然后检查方法中的null。

对Erik的帖子进行小修改,使其工作(我使用的是MVC4)


这不意味着URL必须是/Blog/Show/1而不是Blog/1吗?如果我把它们合并成一种方法呢。我用新代码更新了问题,但它也给了我一个错误。您可以在Global.asax中的路由配置中将
Show
操作设为默认值:
action=“Show”
,而不是
action=“Index”
。现在您可以使用
/Blog/123
。不,不要把这两个动作组合成一个动作。这将是一个糟糕的设计决策。
Function Index() As ViewResult
    Return (View(db.Blogs.ToList()))
End Function

'
' GET: /Blog/(Integer)

Function Show(id As Integer) As ViewResult
    Dim blog As Blog = db.Blogs.Find(id)
    Return View("Details", "_MyLayout", blog)
End Function
routes.MapRoute("Blog", "Blog", new { controller = "Blog", action = "ShowBlog" });
routes.MapRoute("Blog", "Blog/{id}", new { controller = "Blog", action = "ShowBlog" });