Asp.net mvc 如何在cshtml模板中创建函数?
我需要创建一个只在一个cshtml文件中需要的函数。您可以将我的情况视为ASP.NET页面方法,它们是在一个页面中实现的最小web服务,因为它们的作用域是一个页面。我知道HTML助手(扩展方法),但我的函数只需要在一个cshtml文件中使用。我不知道如何在视图中创建函数签名。Asp.net mvc 如何在cshtml模板中创建函数?,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,我需要创建一个只在一个cshtml文件中需要的函数。您可以将我的情况视为ASP.NET页面方法,它们是在一个页面中实现的最小web服务,因为它们的作用域是一个页面。我知道HTML助手(扩展方法),但我的函数只需要在一个cshtml文件中使用。我不知道如何在视图中创建函数签名。 注意:我正在使用Razor模板引擎。查看一下您可以使用@helper Razor指令: @helper WelcomeMessage(string username) { <p>Welcome, @us
注意:我正在使用Razor模板引擎。查看一下您可以使用@helper Razor指令:
@helper WelcomeMessage(string username)
{
<p>Welcome, @username.</p>
}
如果您的方法不必返回html并且必须执行其他操作,那么您可以在Razor中使用lambda而不是helper方法
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
Func<int,int,int> Sum = (a, b) => a + b;
}
<h2>Index</h2>
@Sum(3,4)
@{
ViewBag.Title=“Index”;
Layout=“~/Views/Shared/_Layout.cshtml”;
Func Sum=(a,b)=>a+b;
}
指数
@总和(3,4)
为什么不在cshtml文件中声明该函数呢
@functions{
public string GetSomeString(){
return string.Empty;
}
}
<h2>index</h2>
@GetSomeString()
@函数{
公共字符串GetSomeString(){
返回字符串。空;
}
}
指数
@GetSomeString()
如果要访问页面的全局变量,可以执行以下操作:
@{
ViewData["Title"] = "Home Page";
var LoadingButtons = Model.ToDictionary(person => person, person => false);
string GetLoadingState (string person) => LoadingButtons[person] ? "is-loading" : string.Empty;
}
在ASP.NET Core Razor页面中,您可以在函数中组合C#和HTML:
@model PagerModel
@{
}
@functions
{
void PagerNumber(int pageNumber, int currentPage)
{
if (pageNumber == currentPage)
{
<span class="page-number-current">@pageNumber</span>
}
else
{
<a class="page-number-other" href="/table/@pageNumber">@pageNumber</a>
}
}
}
<p>@PagerNumber(1,2) @PagerNumber(2,2) @PagerNumber(3,2)</p>
@model PagerModel
@{
}
@功能
{
无效页码(整数页码,整数当前页)
{
如果(页码==当前页)
{
@页码
}
其他的
{
}
}
}
@PagerNumber(1,2)@PagerNumber(2,2)@PagerNumber(3,2)
它是可行的,但远不是简单的。我的圣书是简单;)。但感谢您提供的替代方案。如果您需要在函数中访问页面的全局变量,这很有用,还有其他方法吗/这应标记为答案,因为@functions指令特别满足OP要求。Helpers功能旨在通过将带有@helper指令的文件放入App_代码目录,跨多个模板文件共享使用。然而,@functions指令允许函数仅由声明它的模板使用。还要注意的是,帮助程序似乎像其他razor帮助程序一样面向返回字符串,因此函数
解决方案为其返回类型提供了更大的灵活性。在我的书中,这两个答案都是+1,因为它们都是有用的信息。@AaronLS公平地说,帮助程序不返回字符串,而是返回IHtmlString,它为您处理HTML编码并保护您的应用程序免受XSS攻击。Helpers还为您提供了helper本身的Razor语法的便利,这在函数中会丢失。换句话说,欢迎,@username.
与返回新的HtmlString(欢迎,“+Html.Encode(username)+””)相比代码>。但是,在单个视图中使用@helper
并不能使其对其他视图可用。我之所以更喜欢@helper,是因为你可以在花括号之间插入html@functions
不(容易)让你这么做。仅供记录:@helper
和@functions
都可以在多个视图中共享,并且都可以在单个视图中声明和使用(我个人发现它们在两个共享/单个场景中都有用处)。它们之间唯一的实际区别是视图帮助器为返回呈现的HTML片段(或者更合适的是,HelperResult
实例)添加了语法糖,视图函数通常只用于返回简单的引用或值类型。您不能在@functions
方法中放置标记,因此我喜欢这个答案。是的,这比声明函数要好得多。更直截了当的是。但是你不能返回变量(因此单词function)asp.net内核是否也支持@helper?@MuM6oJuM6o不,它不支持。您可以找到本文中列出的备选方案,因为C#7.0是唯一正确的答案<代码>GetLoadingState()
这里是本地函数。另请参见
@model PagerModel
@{
}
@functions
{
void PagerNumber(int pageNumber, int currentPage)
{
if (pageNumber == currentPage)
{
<span class="page-number-current">@pageNumber</span>
}
else
{
<a class="page-number-other" href="/table/@pageNumber">@pageNumber</a>
}
}
}
<p>@PagerNumber(1,2) @PagerNumber(2,2) @PagerNumber(3,2)</p>