Answers:
@functions不用讨论何时应该(如果有的话)应该做的任何争论。
@functions {
// Add code here.
}
@functions
是组织查看特定生成代码的好地方。
你是说内联助手?
@helper SayHello(string name)
{
<div>Hello @name</div>
}
@SayHello("John")
在剃刀内部定义功能非常简单。
@functions {
public static HtmlString OrderedList(IEnumerable<string> items)
{ }
}
因此,您可以在任何地方调用该函数。喜欢
@Functions.OrderedList(new[] { "Blue", "Red", "Green" })
但是,同样的工作也可以完成helper
。举个例子
@helper OrderedList(IEnumerable<string> items){
<ol>
@foreach(var item in items){
<li>@item</li>
}
</ol>
}
那么区别是什么呢??根据上一篇文章,@ helpers和@functions确实有一个共同点-它们使代码可以在Web页面中重用。他们也有其他共同点-乍一看它们看起来是一样的,这可能会使他们的角色有些混乱。但是,它们并不相同。本质上,辅助程序是作为一种方法公开的Razor sytnax的可重用代码段,旨在将HTML呈现给浏览器,而功能是可以从您的Web页应用程序中的任何位置调用的静态实用程序方法。助手的返回类型始终是HelperResult,而函数的返回类型则是您想要的任何类型。
@Functions
前缀来调用函数@OrderedList(...)
。
您只需在剃刀块(即)中将它们声明为局部函数即可@{}
。
@{
int Add(int x, int y)
{
return x + y;
}
}
<div class="container">
<p>
@Add(2, 5)
</p>
</div>
MyModelVm.cs
public class MyModelVm
{
public HttpStatusCode StatusCode { get; set; }
}
Index.cshtml
@model MyNamespace.MyModelVm
@functions
{
string GetErrorMessage()
{
var isNotFound = Model.StatusCode == HttpStatusCode.NotFound;
string errorMessage;
if (isNotFound)
{
errorMessage = Resources.NotFoundMessage;
}
else
{
errorMessage = Resources.GeneralErrorMessage
}
return errorMessage;
}
}
<div>
@GetErrorMessage()
</div>