未找到路径'/'的控制器或未实现IController

时间:2013-06-04 17:03:51

标签: c# asp.net-mvc razor render

我正在编写一段代码,在每个网页上显示随机赞助商图片。我认为调用我的函数的最佳位置是在Views / Shared / _Layout.cshtml页面中,因为那是在每个页面加载的那个。

我在我的域模型中的服务类中编写了该函数,并在我的homecontroller中编写了一个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中的函数调用whitch包含导航栏等:

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

问候。

2 个答案:

答案 0 :(得分:10)

(自评论转换)

您无需在Html.Action中指定控制器的完整班级名称。尝试使用@Html.Action("RandomSponsor", "Home")代替@Html.Action("RandomSponsor", "HomeController")

答案 1 :(得分:0)

您缺少控制器的名称。请注意,当您创建一个控制器并将其命名为Alexie时,默认情况下MVC会将其命名为AlexieController。因此,当您在控制器内调用函数时,应如下所示:

@Html.Action("Function Name", "Alexie").
And not like this:
@Html.Action("Function Name", "AlexieController").

所以,我同意wgraham的回答。