Asp.net mvc 5 MVC使用下拉菜单和单独的控制器共享局部视图
我所追求的是拥有一个局部视图,其中包含系统中所有可用语言的下拉列表。此局部视图将在许多编辑模板中使用,并将从单独的控制器加载 根据网上的文章和信息,我有以下实现: 视图模型Asp.net mvc 5 MVC使用下拉菜单和单独的控制器共享局部视图,asp.net-mvc-5,Asp.net Mvc 5,我所追求的是拥有一个局部视图,其中包含系统中所有可用语言的下拉列表。此局部视图将在许多编辑模板中使用,并将从单独的控制器加载 根据网上的文章和信息,我有以下实现: 视图模型 public class LanguagesViewModel { public int SelectedID { get; set; } public virtual SelectList Languages { get; set; } public LanguagesViewModel(int
public class LanguagesViewModel
{
public int SelectedID { get; set; }
public virtual SelectList Languages { get; set; }
public LanguagesViewModel(int selectedID, IEnumerable<Language> languages)
{
SelectedID = selectedID;
Languages = new SelectList(languages, "LanguageId", "Name");
}
}
我有一个LanguageController,它具有以下实现
public ActionResult GetAllLanguages()
{
var languages = service.GetAll();
return PartialView("_LanguageDropDownList", new LanguagesViewModel(1, languages));
}
因此,上面的内容是为了加载该部分视图中的下拉列表,以便我可以在其他模板中使用它
从从不同控制器(应用程序设置)加载的模板中,我使用以下方法调用局部视图:
@Html.Action("GetAllLanguages", "LanguageController")
这不管用。它抛出一个异常:
路径“/ApplicationSetting/Edit/1”的控制器未找到或未实现IController
对于这种情况,正确的实现是什么
感谢Asp.Net MVC中的当我们制作一个新控制器时,
'controller'
后缀会自动附加到控制器名称,例如:-在您的情况下,如果您为控制器指定'Language'
名称,那么控制器的完整名称将类似于'LanguageController'
,因此,无论你想在哪里给控制器命名,你都必须只使用'Language'
而不是'LanguageController'
,而@Html.Action()
的重载之一是控制器名
,它只是'Language'
,而不是'LanguageController'
,因此在你的问题中只需更改@Html.Action(“GetAllLanguages”,“LanguageController”)
与@Html.Action(“GetAllLanguages”,“Language”)
一起使用,您的问题就会得到解决。只需将Html.Action改为…@Html.Action(“GetAllLanguages”,“Language”)我知道它很小…非常感谢。那为什么它不是LanguageController呢?函数的第四个重写是actionName,controllerName。
@Html.Action("GetAllLanguages", "LanguageController")