3

各 Web ページにランダムなスポンサー画像を表示するコードに取り組んでいます。関数を呼び出すのに最適な場所は Views/Shared/_Layout.cshtml ページであると考えました。これは、すべてのページで読み込まれるページだからです。

ドメイン モデルのサービス クラスにChildActionOnly関数を記述し、ホーム コントローラーに関数を記述し、Views/Home/Randomsponsor.cshtml の単純なビューで値を返し、Html.action を使用して共有レイアウトで関数を呼び出しました。

すべてが正常にビルドされますが、実行中に次のエラーが発生します:

{"The controller for path '/' was not found or does not implement IController."}

これを修正する方法を知っている人はいますか?

ドメイン プロジェクトのメソッド:

public String advertsForCountry()
{
    String studentSchool = finder.getLoggedStudent().SchoolId;
    int studentCountry = db.Schools.Find(studentSchool).CountryId;

    List<Sponsor> sponsorsForStudent = new List<Sponsor>();
    List<Advert> adverts = db.Adverts.ToList();
    foreach(Advert adv in adverts)
    {
        foreach(Country cntry in adv.Countries)
        {
            if(cntry.CountryId == studentCountry)
            {
                sponsorsForStudent.Add(adv.Sponsor);
            }
        }
    }
    Random random = new Random();
    int randomSP = random.Next(0, sponsorsForStudent.Count()-1);
    string sponsorAdvert = sponsorsForStudent.ElementAt(randomSP).SponsorCompany;
    return sponsorAdvert;       
}

HomeController で:

[HttpGet]   
[ChildActionOnly]
public ActionResult RandomSponsor()
{
    var model = service.advertsForCountry();

    return PartialView("RandomSponsor", model);
}

Views/Home/ の簡易ビュー:

@{
    ViewBag.Title = "RandomSponsor";
}

@Html.Action("RandomSponsor")

そして、View/Shared/_Layout.cshtml での私の関数呼び出しには、ナビゲーション バーなどが含まれています。

@Html.Action("RandomSponsor", "HomeController")

よろしく。

4

2 に答える 2

10

(コメントから変換)

で Controller の完全なクラス名を指定する必要はありませんHtml.Action@Html.Action("RandomSponsor", "Home")の代わりに使ってみてください @Html.Action("RandomSponsor", "HomeController")

于 2013-06-05T15:11:47.823 に答える