首页 > 解决方案 > 在剃刀视图中为操作 URL 设置变量是一种好习惯吗?我可以把它们放在 ViewModel 中吗?

问题描述

我试图为可读性和易于修改提供更清晰的视图。

对于每个视图,我通常有几个变量代表其中使用的操作 URL:

    @model IndexViewModel
    
    @{
        // controllers
        string newsControllerName = nameof(NewsController).ToName();
    
        // calls to actions
        string removeNewsActionUrl = Url.Action(nameof(NewsController.RemoveNews));
        string getNewsActionUrl = Url.Action(nameof(NewsController.GetNews));
        string indexActionUrl = Url.Action(nameof(NewsController.Index));
    } 

所以我可以在视图的数据属性中使用它们来进行 JavaScript 中的 ajax 调用:

    <div id="newsContainer"
         data-remove-url="@removeNewsActionUrl"
         data-view-url="@getNewsActionUrl">
        ...
    </div>

然后我的一个朋友建议我不应该在视图中声明变量,因为这是一种不好的做法,为什么不在这种情况下在该视图的 ViewModel 中声明它们IndexViewModel

我知道视图不应该有复杂的逻辑,应该有最少的 C# 代码,但我在做什么是不好的做法?如果是,为什么?为此目的在该视图的 ViewModel 中声明变量是否有缺点或优点?

Microsoft 文档视图和视图模型:

视图负责通过用户界面呈现内容。他们使用 Razor 视图引擎在 HTML 标记中嵌入 .NET 代码。视图中应该有最少的逻辑,其中的任何逻辑都应该与呈现内容有关。如果您发现需要在视图文件中执行大量逻辑以显示来自复杂模型的数据,请考虑使用视图组件、视图模型或视图模板来简化视图

我在这个网站上找不到与此相关的任何内容。

标签: c#asp.net-corerazorviewmodel

解决方案


我不想在视图模型中使用这些东西。那里是多余的,因为模型和控制器之间没有什么可以通信的。

我看不出这有什么问题——它是最小的逻辑,它纯粹与视图本身有关。将它放在其他任何地方都会无缘无故地污染代码库的另一部分。

也就是说,我真的看不出代码块有什么好的理由——为什么不把它内联到 HTML 属性中呢?


推荐阅读