如何在Razor中定义方法?
答案 0 :(得分:284)
单独留下关于何时(如果有的话)应该进行的辩论,@functions就是你如何做到的。
@functions {
// Add code here.
}
答案 1 :(得分:182)
你的意思是内联帮助?
@helper SayHello(string name)
{
<div>Hello @name</div>
}
@SayHello("John")
答案 2 :(得分:23)
在剃刀内定义一个函数非常简单。
@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>
}
那有什么区别?根据之前的post,@ helpers和@functions共享一个共同点 - 它们使代码重用成为Web页面中的一种可能性。他们还有另一个共同点 - 乍一看它们看起来是一样的,这可能会对他们的角色产生一些混淆。但是,它们并不相同。从本质上讲,帮助程序是作为方法公开的可重用的Razor sytnax片段,用于将HTML呈现给浏览器,而函数是可以从Web页面应用程序中的任何位置调用的静态实用程序方法。帮助器的返回类型始终是HelperResult,而函数的返回类型是您想要的任何类型。
答案 3 :(得分:12)
您也可以使用像这样的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>
答案 4 :(得分:9)
答案 5 :(得分:0)
您也可以只使用class DashboardPage extends Component {
...
componentDidMount() {
axios.get('http://localhost:3000/users/me', this.yourConfig)
.then(function (response) {
// handle success
console.log(response.data.name)
console.log(response.data.email)
})
....
render() {
return (
<div className="App">
<p>Welcome {this.response.data.name}</p>
<p>Your email is {this.response.data.email}</p>
this is your token {this.tokenCookie}
</div>
);
}
}
块来创建函数:
@{ }
然后在您的剃须刀页面中
@{
async Task<string> MyAsyncString(string input)
{
return Task.FromResult(input);
}
}
答案 6 :(得分:0)
您可以在一个剃刀块(即@{}
)中简单地将它们声明为局部函数。
@{
int Add(int x, int y)
{
return x + y;
}
}
<div class="container">
<p>
@Add(2, 5)
</p>
</div>
答案 7 :(得分:0)
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>
答案 8 :(得分:0)
这里是如何在 ASP.NET Core 3 中编写列表助手
您现在可以像以前一样在代码块中声明的方法体中包含 HTML 标记,作为本地方法,或在@functions 块中。该方法应该返回 void,如果需要异步处理,则为 Task :
@{
void Template(string[] listItems, string style)
{
<ul>
@foreach (var listItem in listItems)
{
<li class="@style">@listItem</li>
}
</ul>
}
}