我正在学习 Umbraco 7,想要构建一个常见 Razor 函数库。
我的想法是拥有一个核心部分 View ,该部分 View 将包含在大多数模板中,并且该部分 View 将具有一个 @functions{} block 。
然后我就可以从主模板调用这些函数。 但是,这似乎不起作用 - 可能是范围问题。
我尝试过使用 ViewBag 和 ViewData,但在部分中更改它们不会返回到模板。
换句话说,我似乎可以将参数和页面属性传递给部分 View ,但无法将任何内容传递回调用模板?
函数会多种多样,包括对页面内容进行字符串操作(例如字符串替换),其想法是该函数将具有相关属性的参数,一些要替换的文本,然后将结果返回到模板以进行输出,所以其他想法包括
- 分部 View 更新页面属性,然后可以由模板输出(这可能吗?)
- 向部分传递参数(包括一个说明要使用哪个函数的参数),并让部分本身将函数的结果输出到浏览器。但是,由于我可能想在页面上的多个属性上使用这些函数,这意味着多次包含部分 View ,每个属性一次。这会导致问题吗?
- 将函数放在主模板上并从子模板中调用(不起作用)
或者我缺少更好的方法。
总而言之,我想做的(不修改 Controller 或 MVC 的任何部分 - 即使用开箱即用的 Umbraco)是集中存储通用函数,我可以调用模板来操作页面内容在将其发送到浏览器之前。
非常感谢您收到的建议/链接。
[编辑]
找到了可能的解决方案:在App_Code中的cshtml文件中添加函数并通过文件名引用
例如
myFunctions.cshtml 有功能 myFn(...
所以在模板中 @myFunctions.myFn(...
这是一个强大的解决方案吗?
缺点是任何更改都会立即影响整个网站,因此任何错误都会成为整个网站的问题,而部分 View 解决方案只会影响使用的模板。
最佳答案
您还可以在 App_Code 文件夹中创建一个类文件(例如 Helpers.cs 等) - 放置在该类中的任何函数都应该在整个项目中可用,并且自然只有一个地方可以维护代码。
关于umbraco 7 在模板之间共享@functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020914/