我如何定义一个方法在剃刀?
当前回答
下面是如何在ASP中编写列表助手。NET Core 3
现在,您可以在代码块中声明的方法体中包含HTML标记,就像以前一样作为本地方法,或者在@functions块中包含HTML标记。方法应该返回 void,或者Task(如果需要异步处理):
@{
void Template(string[] listItems, string style)
{
<ul>
@foreach (var listItem in listItems)
{
<li class="@style">@listItem</li>
}
</ul>
}
}
其他回答
你也可以使用@{}块来创建函数:
@{
async Task<string> MyAsyncString(string input)
{
return Task.FromResult(input);
}
}
然后在你的剃须刀页后面:
<div>@(await MyAsyncString("weee").ConfigureAwait(false))</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>
您也可以使用下面的代码块。它更干净,功能更丰富。你也可以在上面插入变量,在下面插入函数。而不是使用2个单独的代码块。
@{
string exampleVariable = "just an example variable";
string anotherExampleVariable = "just another example variable";
string GetErrorMessage()
{
var isNotFound = Model.StatusCode == HttpStatusCode.NotFound;
string errorMessage;
if (isNotFound)
{
errorMessage = Resources.NotFoundMessage;
}
else
{
errorMessage = Resources.GeneralErrorMessage
}
return errorMessage;
}
}
你也可以用Func这样做
@{
var getStyle = new Func<int, int, string>((width, margin) => string.Format("width: {0}px; margin: {1}px;", width, margin));
}
<div style="@getStyle(50, 2)"></div>
Razor只是一个模板引擎。
您应该创建一个常规类。
如果你想在Razor页面中创建一个方法,把它们放在@functions块中。
先不讨论什么时候(如果有的话)应该做这件事,@functions就是你做这件事的方式。
@functions {
// Add code here.
}
推荐文章
- .NET中的Map和Reduce
- 我如何能使一个组合框不可编辑的。net ?
- 在ASP中实现请求节流的最佳方法。净MVC吗?
- .NET反射的成本有多高?
- 实体框架回滚并移除不良迁移
- 将流转换为字符串并返回
- 在c#中检查字符串是否只包含数字的最快方法
- IEquatable和重写Object.Equals()之间的区别是什么?
- 创建一个堆栈大小为默认值50倍的线程有什么危险?
- 转换JSON字符串到JSON对象c#
- 显示两个datetime值之间的小时差值
- 如何设置enum为空
- 选择Enum类型的默认值而无需更改值
- 我如何设置在一个组合框中选择的项目,以匹配我的字符串使用c# ?
- String与StringBuilder