我所拥有的是拥有部分视图,该视图托管系统中所有可用语言的下拉列表。此部分视图将用于许多编辑模板,并将从单独的控制器加载。
根据网上的文章和信息,我有以下实现:
视图模型
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");
}
}
在共享文件夹中,我有一个文件:_LanguageDropDownList.cshtml with
@model XNETProductQuote.Web.Models.LanguagesViewModel
@Html.DropDownListFor(model => model.SelectedID, Model.Languages)
我有一个具有以下实现的LanguageController
public ActionResult GetAllLanguages()
{
var languages = service.GetAll();
return PartialView("_LanguageDropDownList", new LanguagesViewModel(1, languages));
}
所以上面的意思是在该局部视图中加载下拉列表,以便我可以在其他模板中使用它。
从另一个控制器(ApplicationSetting)加载的模板中,我使用:
调用局部视图 @Html.Action("GetAllLanguages", "LanguageController")
这不起作用。它引发了一个异常: 未找到路径'/ ApplicationSetting / Edit / 1'的控制器或未实现IController。
这种情况的正确实施是什么?
由于
答案 0 :(得分:1)
在Asp.Net MVC中,当我们创建一个新的控制器时,'Controller'
后缀自动附加到控制器名称,例如: - 在您的情况下,如果您向控制器提供'Language'
名称,则控制器完成名称将类似于'LanguageController'
,因此,只要您想要提供控制器名称,就必须使用'Language'
而不是'LanguageController'
,其中一个重载@Html.Action()
为{{1}这只是ControllerName
而不是'Language'
,所以在您的问题中,只需使用'LanguageController'
更改@Html.Action("GetAllLanguages", "LanguageController")
,您的问题就会得到解决。