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 メニューで再構築を選択すると機能します。そうしないと、2回は機能しません。