c# - razor 文件中的 @functions 代码块有什么作用,我应该何时(如果有的话)使用它?

标签 c# asp.net-mvc-3 razor orchardcms

在查看我从 Orchard CMS 库下载的主题时,我注意到 Layout.cshtml 文件的顶部有以下代码块:

@functions {
// To support the layout classifaction below. Implementing as a razor function because we can, could otherwise be a Func<string[], string, string> in the code block following.
string CalcuClassify(string[] zoneNames, string classNamePrefix)
{
    var zoneCounter = 0;
    var zoneNumsFilled = string.Join("", zoneNames.Select(zoneName => { ++zoneCounter; return Model[zoneName] != null ? zoneCounter.ToString() : ""; }).ToArray());
    return HasText(zoneNumsFilled) ? classNamePrefix + zoneNumsFilled : "";
}
}

我知道声明函数的作用(计算填充哪些区域以返回每列的宽度),我的问题是 - @function block 的正确用法是什么,我应该什么时候使用它?

最佳答案

@functions block 允许您直接在 View 中定义实用函数,而不是将它们作为扩展添加到 @Html 帮助器或让 Controller 知道显示属性.当你能满足这些条件时,你会想使用它:

  1. 该功能与 View 紧密相关,在其他地方通常用处不大(例如“我的列有多宽”)。
  2. 该功能不仅仅是一个简单的 if 语句,和/或在您的 View 中的多个位置使用。
  3. 函数确定其逻辑所需的一切都已存在于 View 的 Model 中。

如果第一个失败,请将其添加为 @Html 助手。

如果你失败了第二个,就内联它。

如果第三个失败,您应该在 Controller 中进行计算并将结果作为模型的一部分传递。

关于c# - razor 文件中的 @functions 代码块有什么作用,我应该何时(如果有的话)使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13975290/

相关文章:

c# - 如何从 MailItem 获取特定于任务的属性

javascript - 如何使用JS/jQuery在一个页面的两个局部 View 之间切换?

html - 如何使用 Razor 动态创建行

c# - 如何从 OwnerActorNr 获取玩家姓名 | PUN2

c# - 隐藏代码未在回发时获取对 Gridview 上的 Checkbox 所做的更改

c# - 将 Field<> 与 Linq to SQL 结合使用

c# - Html.TextBoxFor/Html.TextAreaFor 和 Html.EditorFor 之间的客户端验证差异(使用 [DataType(DataType.MultilineText)])

asp.net - 使用 WatiN 测试 ASP.NET 站点。是否可以在本地以编程方式部署 ASP.net 站点?

asp.net-mvc-3 - asp.net mvc 3 and static resources 40 4'ing when using "Local IIS Web server”

asp.net-mvc-3 - Razor 语法中的 ValidateRequest