【问题标题】:Calling a Controller Action Method from Razor (ASP.NET MVC, .netcore 3.x/5.x)从 Razor 调用控制器操作方法(ASP.NET MVC,.net core 3.x/5.x)
【发布时间】:2020-12-28 17:42:55
【问题描述】:

我希望将一个相当复杂的 ASP.NET MVC 应用程序从全框架迁移到 .Net Core,并更新到最新模式。当我们完成时,.Net 5 将完全发布....

我们现有的应用程序有一个布局视图 (_Layout.cshtml),它呈现主要内容。它还具有显示其他数据的不同“部分”(通常具有自己的 AJAX 功能)。

为了加载这些部分(在旧应用程序中),我们在_Layout.cshtml file 中使用以下示例语法:

<div class="....">
    @this.Html.Action("ActionName", "ControllerName")
</div>

当调用此控制器操作时,它会从各种来源提取数据,生成 ViewModel,并返回一个 View(使用此 VM),然后显示在布局页面上。这些部分是“独立的”——通常有自己的 AJAX 活动。

对于 MVC .Net Core 3.x/5.x,我已经看到很多使用 &lt;partial name="_NameOfPartial" /&gt; 呈现局部视图的示例。这有一个model 的属性,所以我可以使用这种方法,但是从“单一责任”的角度来看,对于不相关的事情(在这种情况下,我的布局)对我来说了解关于视图模型的任何信息对一个 un相关部分。我还没有看到通过首先调用 Controller 来生成所需的 ViewModel 来执行此操作的示例...

我知道(但不是很熟悉)剃刀页面(vs 剃刀视图)。我的第一个想法是它们无疑对“轻量级”应用程序有用,但对于像我这样复杂的应用程序可能没有用。但是,我是否误解了这一点 - 什么标准决定是使用剃刀页面还是剃刀视图? “MVC”过时了吗?

但是,我的主要问题实际上分为两部分:

  1. 对于我的场景,对于 Core 5.x,视图(不仅仅是布局)调用控制器操作方法来生成视图模型并返回部分视图是“最佳实践”吗?如果不是,这里的最佳做法是什么(认为这是一个复杂的应用程序)?
  2. 如果对 1. 表示“是”,那么语法是什么?

提前致谢。

【问题讨论】:

  • 啊....是ViewComponent要走的路....?
  • 仅供参考:ViewComponent

标签: asp.net-mvc asp.net-core model-view-controller razor razor-pages


【解决方案1】:

我相信你是对的,最好的方法是在控制器中调用控制器和动作。

来自视图的调用将如下所示(示例按钮):

<div class="form-group">
        <a id="redbutton" asp-action="Clear" class="btn btn-danger">Reset</a>
</div>

控制器看起来像:

public async Task<IActionResult> Clear()
    { Code Here }

如果您正在调用另一个控制器,您可以指定控制器:

<div class="form-group">
        <a id="redbutton" asp-controller="ControllerName" asp-action="Clear" class="btn btn-danger">Reset</a>
    </div>

希望这会有所帮助。

【讨论】:

  • 这会在浏览器上呈现一个锚点,必须点击(用户或 JavaScript)才能执行。使用@this.Html.Action("ActionName", "ControllerName"),它在将 HTML 注入响应的服务器上执行。正如我在主线程的评论中提到的,我现在认为ViewComponent 可能是要走的路。
  • 好的,我很抱歉。祝你好运。
猜你喜欢
  • 2020-03-20
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2012-12-12
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多