区域上的ASP MVC url / link生成为空

时间:2014-01-26 06:22:17

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing asp.net-mvc-5 razorengine

我正在使用ASP MVC 5并尝试在“ControlPanel”区域内的视图中生成链接

我的视图rootfolder / Areas / ControlPanel / Views / CourseCategory / Index.cshtml

@Html.ActionLink("edit", "Edit", new { id = item.Id }, new { @class = "btn btn-default btn-xs" })
@Html.ActionLink("delete", "Delete", new { id = item.Id }, new { @class = "btn btn-danger btn-xs" })

我的AreaRegistration

public class ControlPanelAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "ControlPanel";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.Routes.LowercaseUrls = true;

            context.MapRoute(
                name: "ControlPanel.CourseCategory",
                url: "controlpanel/course-categories/{id}",
                defaults: new { controller = "CourseCategory", action = "Index", id = UrlParameter.Optional },
                namespaces: new[] { "Website.Areas.ControlPanel.Controllers" }
            );
        }
    }

RouteConfig文件

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.LowercaseUrls = true;

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "HomePage",
                url: "",
                defaults: new { controller = "Home", action = "Index" }
            );

        }
    }

我的控制器

namespace Website.Areas.ControlPanel.Controllers
{
    public class CourseCategoryController : ControlPanelController
    {

        public CourseCategoryController(IUnitOfWork uow)
            :base(uow)
        {
        }

        public ActionResult Index()
        {
            return View(_uow.Repository<CourseCategory>().GetAllOrderByCode());
        }
    }
}

现在输出html产生空的href

<a class="btn btn-default btn-xs" href="">edit</a>
<a class="btn btn-danger btn-xs" href="">delete</a>

在这种情况下,在Html.ActionLink或Url.Action和Url.RouteUrl上生成链接的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

您的路线值似乎缺少控制器(我注意到您没有在@Html.ActionLink中的任何位置指定一个

@Html.ActionLink("edit", "Edit", new { controller="CourseCategory", id = item.Id }, new { @class = "btn btn-default btn-xs" })

或者 - Html.ActionLink

的替代重载
@Html.ActionLink("edit", "Edit", "CourseCategory", new { id = item.Id }, new { @class = "btn btn-default btn-xs" })

最后,将区域名称作为RouteValues字典的一部分包含在内并不会受到伤害,但这不是必需的。

修改

您似乎更新了一些其他信息。这看起来不正确(URL的空白值)

routes.MapRoute(
  name: "HomePage",
  url: "",
  defaults: new { controller = "Home", action = "Index" }
);

默认情况下,它看起来应该是这样的

routes.MapRoute(
  name: "HomePage",
  url: "{controller}/{action}",
  defaults: new { controller = "Home", action = "Index" }
);

我认为有一个空白网址肯定会导致在Html.ActionLink中创建空白网址。这些帮助器查看您的路由配置以生成URL,并且这个似乎正在接管所有内容,因为它匹配所有内容。

答案 1 :(得分:0)

尝试将此区域名称与ID

一起使用
@Html.ActionLink("edit", "Edit", new { id = item.Id, area = "ControlPanel" }, new { @class = "btn btn-default btn-xs" })
@Html.ActionLink("delete", "Delete", new { id = item.Id, area = "ControlPanel" }, new { @class = "btn btn-danger btn-xs" })

答案 2 :(得分:0)

我认为问题在于指向索引操作的默认值并且操作未绑定在路径上!??