Asp.net mvc 具有可选参数和局部视图的asp.net mvc

Asp.net mvc 具有可选参数和局部视图的asp.net mvc,asp.net-mvc,Asp.net Mvc,我有: 唱片控制器 光电沉积 Index.aspx视图 在Index.aspx中,我有一个部分视图调用AlbumControl。我想通过ajax和ajaxhelper来更新它 问题是我希望能够做到以下几点: 执行此操作时,会出现以下错误: 当前对控制器类型“AlbumsController”的操作“Index”的请求在以下操作方法之间不明确: 类型控制器上的System.Web.Mvc.ActionResult IndexSystem.String.AlbumsController 类型控制

我有:

唱片控制器 光电沉积 Index.aspx视图

在Index.aspx中,我有一个部分视图调用AlbumControl。我想通过ajax和ajaxhelper来更新它

问题是我希望能够做到以下几点:

执行此操作时,会出现以下错误:

当前对控制器类型“AlbumsController”的操作“Index”的请求在以下操作方法之间不明确:

类型控制器上的System.Web.Mvc.ActionResult IndexSystem.String.AlbumsController 类型控制器上的System.Web.Mvc.ActionResult索引.AlbumsController

我原以为asp.net mvc会发现,如果我在querystring中传入一个参数,它将转到Indexstring标记方法,如果我没有传入一个参数,它将转到Index


建议?

问题在于MVC路由引擎无法区分以下各项:-

1呼叫索引

2调用标记为null的Indexstring标记

这就是为什么它说这个请求模棱两可

您只需执行以下操作:-

public ActionResult Index(string tag)
{
  if(String.IsNullOrEmpty(tag))
  {
    // index code goes here
    return View("Index");
  }
  else
  {
    // code to handle filtered view goes here
    return View("Tag");
  }
}
或者,您可以使用自定义属性强制要求参数:-

或者您可以设置路由,以便Albums和Albums?FilterTag=X显式转到不同的操作。顺便说一句,我建议Albums和Albums/X:-

  routes.MapRoute("AlbumsIndex", "Albums",
    new { controller = "Albums", action = "Index" });
  routes.MapRoute("AlbumsTag", "Albums/{tag}",
    new { controller = "Albums", action = "Tag", tag = "" });
  routes.MapRoute("Default", "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" );


问题在于MVC路由引擎无法区分以下两种情况:-

1呼叫索引

2调用标记为null的Indexstring标记

这就是为什么它说这个请求模棱两可

您只需执行以下操作:-

public ActionResult Index(string tag)
{
  if(String.IsNullOrEmpty(tag))
  {
    // index code goes here
    return View("Index");
  }
  else
  {
    // code to handle filtered view goes here
    return View("Tag");
  }
}
或者,您可以使用自定义属性强制要求参数:-

或者您可以设置路由,以便Albums和Albums?FilterTag=X显式转到不同的操作。顺便说一句,我建议Albums和Albums/X:-

  routes.MapRoute("AlbumsIndex", "Albums",
    new { controller = "Albums", action = "Index" });
  routes.MapRoute("AlbumsTag", "Albums/{tag}",
    new { controller = "Albums", action = "Tag", tag = "" });
  routes.MapRoute("Default", "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" );


和我要打的差不多。但就我个人而言,我会在属性方面做更多的工作,要么将值设置为默认值(如果没有),要么在出现错误时重定向。只是为了更容易避免重复代码,以防它是一个经常出现的参数。Programmin工具-这里的属性方法是什么?因为它不是IE拥有的路由中内置的东西?并在url中标记,可能只需检查filterContext.ActionParameters以查看它是否存在。如果没有,请添加它。如果为空,则设置默认参数。但是,只有当您不想在实际方法中检查null时,才需要这样做。如果您不介意这样做,那么执行空字符串检查示例可能会更快。我知道很多地方都会用到属性,比如如果pageNumber不存在,就把它设置为0。这和我要键入的内容差不多。但就我个人而言,我会在属性方面做更多的工作,要么将值设置为默认值(如果没有),要么在出现错误时重定向。只是为了更容易避免重复代码,以防它是一个经常出现的参数。Programmin工具-这里的属性方法是什么?因为它不是IE拥有的路由中内置的东西?并在url中标记,可能只需检查filterContext.ActionParameters以查看它是否存在。如果没有,请添加它。如果为空,则设置默认参数。但是,只有当您不想在实际方法中检查null时,才需要这样做。如果您不介意这样做,那么执行空字符串检查示例可能会更快。我知道很多地方都会用到属性,比如如果不存在,就将pageNumber设置为0。