MVC共享局部视图,带有下拉列表和独立控制器

时间:2014-09-09 07:48:53

标签: asp.net-mvc-5

我所拥有的是拥有部分视图,该视图托管系统中所有可用语言的下拉列表。此部分视图将用于许多编辑模板,并将从单独的控制器加载。

根据网上的文章和信息,我有以下实现:

视图模型

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。

这种情况的正确实施是什么?

由于

1 个答案:

答案 0 :(得分:1)

在Asp.Net MVC中,当我们创建一个新的控制器时,'Controller'后缀自动附加到控制器名称,例如: - 在您的情况下,如果您向控制器提供'Language'名称,则控制器完成名称将类似于'LanguageController',因此,只要您想要提供控制器名称,就必须使用'Language'而不是'LanguageController',其中一个重载@Html.Action()为{{1}这只是ControllerName而不是'Language',所以在您的问题中,只需使用'LanguageController'更改@Html.Action("GetAllLanguages", "LanguageController"),您的问题就会得到解决。