如何从.net核心中的部分视图访问控制器?

时间:2018-04-28 08:01:04

标签: asp.net-core .net-core asp.net-core-mvc asp.net-core-2.0

这是部分视图可能会在很多页面中显示,我使用@ Html.Partial将其插入到页面中。

现在我想更改控制器中部分视图的文本。

这是index.cshtml的代码:

@{
    ViewData["Title"] = "Home Page";
}

@Html.Partial("Aside.cshtml")

以下是HomeController的代码:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

public IActionResult About()
{
    ViewData["Message"] = "Your application description page.";

    return View();
}

public IActionResult Contact()
{
    ViewData["Message"] = "Your contact page.";

    return View();
}

public IActionResult Aside()
{
    return View();
}

public IActionResult Error()
{
    return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}

这是我项目的文件列表:
enter image description here

当项目运行并且加载了index.cshtml时,我发现IActionResult Aside()没有运行,但是IActionResult Index()已经运行了。

正如我所说的这个问题的顶部,我想在控制器中更改部分视图(aside.cshtml)的文本,但现在我不能为IActionResult Aside()没有运行。

它为什么没有运行?我该如何解决这个问题?

请帮帮我,谢谢。

1 个答案:

答案 0 :(得分:1)

以这种方式构建IActionResult Aside()只会在请求/ aside url时运行,但这样做会使用partial,就好像它是一个完整视图一样。如果aside.chstml是部分的,那么家庭控制器不应该有IActionResult Aside()动作方法,因为部分没有动作方法。

如果您希望控制器影响partial,那么执行此操作的一种方法是让控制器在上下文项集合中设置一个值,并通过将当前上下文注入到上下文项集合中来部分访问该值。部分。但是一些开发人员可能认为这有点乱,并且更喜欢控制器不修改部分。

或者,这可能是最好的方法,您可以向视图提供数据(例如使用视图模型),然后让视图将该数据传递给部分@Html.Partial("Aside.cshtml", someData)。您可以在此处详细了解此方法:Pass parameter to Partial View in ASP.NET Core