ここ からSitecoreでコントローラーレンダリングを学習しています。
1つの単純なコントローラー(HelloWorld)と関連ビュー(Index.schtml)を作成しました。 Sitecoreエクスプローラーのレンダリングセクションにそれを(名前PageContentで)マップし、Sitecoreエクスプローラーのコンテンツセクションのホームアイテムにレンダリングアイテムを追加します。
The controller for path '/' was not found or does not implement IController.
私が読んだすべての投稿はAsp .Net MVCに関連していますが、Sitecore MVCに関連した問題があります
Sample.html(Sitecore Explorerレンダリングセクションのページコンテンツ)
@using Sitecore.Mvc
<html>
<body>
@Html.Sitecore().Placeholder("content")
<p>Today's date is @DateTime.Now.ToShortDateString()</p>
</body>
</html>
この行だけが問題を引き起こしています
@Html.Sitecore().Placeholder("content")
この行を削除すると、正常に動作し、ブラウザのページに日付と時刻が表示されます
Index.html
<p>Hello from Controller -todays Date is @DateTime.Now.ToString()</p>
コントローラ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVC.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HellowWorld/
public ActionResult Index()
{
return View();
}
}
}
これは、Sitecore自体のコントローラー実装をオーバーライドするため、デフォルトのMVCルートを含めた場合に発生する可能性があります。
RouteConfig.cs/Global.csから次の行を削除したことを確認します(MVCバージョンによって異なります)。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
プロジェクトで参照されているSystem.Web.Mvc.dllのバージョンを確認してください。 Sitecore Website\Binフォルダー内の同じdllより後である可能性があります。プロジェクトがWebsite\Binフォルダー内のSystem.Web.Mvc.dllと同じバージョンを参照していることを確認してください。
ご参考までに。 ControllerRenderingでコントローラー関数を指定するには、2つの方法があります。
私が追加したい他のものは次のとおりです。 Sitecoreで同じ回答を得ていたところ、次のアイテムタイプの必要性に気づきました。
レイアウト->コントローラー-> [コントローラーアイテム参照タイプ]
各コントローラーの各コントローラーアイテムを作成しました。これは、[レンダリング]の下のコンテンツツリーのコントローラーレンダリングアイテムとコード内の実際のコントローラーの間のギャップを埋めるようです。このコントローラーアイテムのコンテンツは、コントローラーのコードが格納されている名前空間とdll、およびコントローラーアクションが指すアクションを提供します。
これがお役に立てば幸いです。これらのアイテムを使用して以来、エラーはなくなりました。私の例では、Sitecore 8.0を使用しています。
---実用的なソリューション---
このエラーは、ソリューション参照フォルダー(プロジェクト名->参照-> Sitecore.Web.Mvc->右クリックしてプロパティを確認)にあるSitecore.Web.Mvc.DllのバージョンとSitecore.Webのバージョンが異なるために発生します。 .Mvc.Dll in Web.Config in views Folder。
このエラーを解決するには、Sitecore.Web.Mvc.Dllのバージョンが両方のフォルダーで同じであることを確認する必要があります。
ありがとう。
これは、さまざまなサーバーのさまざまな場所にインストールされているMVCに関連している可能性がありますが、アプリケーションの「アプリケーションプールID」をIISから「LocalSystem」に変更すると、問題が解決しました。アプリのアプリプール&変更後にアプリのWebサービスを再起動しました。
私のプロジェクトの問題は、asp.net mvc 5.2.4を使用していたが、sitecoreからのデフォルトのインストールでは5.2.3を使用しており、viewsフォルダーのweb.configで誤ったバージョンが使用されていて、エラーが表示されなかったバージョンのミスマッチがあること!ソリューションを5.2.3にダウングレードした後、機能しました。
別のスレッドでこれを見つけました。スクリプトを使用してSitecore 9.1をインストールし、Viewsフォルダー内のweb.configが実際に5.2.3を参照しているため、System.Web.Mvcを5.2.3にダウングレードしました。これにより、.dllがコピーされ、 sc910.scインスタンスですが、問題は修正されませんでした。まだ解決策を探しています。
[〜#〜]更新[〜#〜]
Sitecore 9.1のトレーニングを受けましたが、同じ問題に遭遇しました。 (Visual Studio)が全体プロジェクトを公開していないため、エラーが発生しました。新しいコントローラーを作成した後、プロジェクトを再ビルドする必要があります。そうしないと、.dllが更新されず、エラーが発生します。これを行うには、公開プロファイルを作成し、publish webボタンを使用することをお勧めします。
指摘すべきもう1つの重要な点は、プロジェクトの公開beforeReferencesを展開してすべての参照を選択することを強くお勧めします、プロパティメニューを開き、ローカルのコピープロパティをFalseに設定します。これを行わないと、wwwrootプロジェクトとwwwrootプロジェクトにまったく同じ.dllバージョンが含まれていない。これにより、お尻のシナリオで問題が発生します。また、ビルドアクションプロパティ内のbothメインweb.configおよびViewsフォルダ内にあるプロパティを次の値に設定することを強くお勧めしますなし、これを行わないと、コンパイルエラーが発生します。