我在我的 MVC4 应用程序中使用 MvcSitemapProvider。我的控制器操作需要参数来解析数据库中的 1:n 关系。例如:商店 > 商品 > 商品详情。假设用户查看 ItemXYZ 的详细信息并单击 Shop > Item > ItemDetails 我希望应用程序再次显示 ItemXYZ。所以 MvcSitemapProvider 必须存储 itemID。奇怪的行为是,当我更改任何代码时,运行它-> 它可以工作。如果我停止它,重新启动它(使用完全相同的代码)它不起作用。如果我再次更改任何代码-> 它再次工作。那怎么可能。这是我的站点地图配置:
<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">
<mvcSiteMapNode title="Werk" controller="Settlement" action="Index">
<mvcSiteMapNode title="Abteilung" controller="Section" action="Index" preservedRouteParameters="settlementID" inheritedRouteParameters="settlementID">
<mvcSiteMapNode title="Maschine" controller="Machine" action="Index" preservedRouteParameters="sectionID" inheritedRouteParameters="sectionID"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMap>
这是一个控制器(看起来都一样):
public class SectionController : ControllerBase
{
//
// GET: /Section/
[SiteMapPreserveRouteData]
public ActionResult Index(int settlementID)
{
using (var e = new ClapEntities())
{
return View(e.Sections.Where(x => x.SettlementID == settlementID).ToList());
}
}
}
这是一个工作代码,除非我不重新启动应用程序。如果我重新启动应用程序,它不起作用。但是,如果我评论例如 [SiteMapPreserveRouteData]-Attribute 它将再次起作用。所以我重新启动应用程序并且我不再工作 - >取消注释属性并且它再次工作,直到我重新启动它。
那怎么可能呢?
编辑:它与更改代码没有任何关系。当我在 Visual Studio 菜单中选择重建时,它可以工作。如果没有,它不会工作两次。