在帮助程序中访问全局页面变量

Ser*_*lov 44 razor asp.net-mvc-3

@{
    int i = 0;
}

@helper Text() {
    <input type="text" name="Ans[@i].Text" />
}
Run Code Online (Sandbox Code Playgroud)

i在帮助器中无法访问.如何访问它?

Evg*_*nyt 105

您可以使用@functions声明将其作为成员添加到您的页面:

@functions
{
    private int i;
}
Run Code Online (Sandbox Code Playgroud)

  • 哇……这个太棒了!感谢分享... :) 救了我。如果我将一个 `int` 参数传递给 helper 并在那里增加它,然后尝试在 helper 之外读取它;它具有初始值,因为 `int` 是一种值类型(一个副本作为参数传递,而不是原始的 int ref)。在 Razor 的助手中,也不能使用 `ref int`,因为助手本质上是 lambda 表达式:http://blog.slaks.net/2011/02/dissecting-razor-part-7-helpers.html/ (3认同)
  • 这应该是公认的答案..谢谢先生 (3认同)
  • @LenielMacaferi,谢谢你在你的评论中提到关于`ref`的内容......我怀疑是这样的,但是你为我节省了一大堆. (2认同)
  • 这是一个很棒的答案。这更符合问题的要求,这正是我所需要的。我需要能够更改我的助手的值。我需要的东西太愚蠢了,制作视图模型或做任何复杂的事情没有意义。很好的答案! (2认同)

Dar*_*rov 11

您可以将其作为参数传递给帮助程序:

@helper Text(int i) {
    <input type="text" name="Ans[@i].Text" />
}
Run Code Online (Sandbox Code Playgroud)

然后:

@{
    int i = 0;
}
@SomeHelper.Text(i)
Run Code Online (Sandbox Code Playgroud)

或者您可以简单地使用编辑器模板来处理所有事情并摆脱那些帮助者.例如:

@Html.EditorFor(x => x.Ans)
Run Code Online (Sandbox Code Playgroud)