我正在使用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上生成链接的正确方法是什么?
答案 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)
我认为问题在于指向索引操作的默认值并且操作未绑定在路径上!??