@{
int i = 0;
}
@helper Text() {
<input type="text" name="Ans[@i].Text" />
}
i
是不是在帮助访问。 如何访问呢?
@{
int i = 0;
}
@helper Text() {
<input type="text" name="Ans[@i].Text" />
}
i
是不是在帮助访问。 如何访问呢?
你可以简单地将其作为成员通过使用@functions声明添加到您页:
@functions
{
private int i;
}
你可以把它作为参数传递给帮手:
@helper Text(int i) {
<input type="text" name="Ans[@i].Text" />
}
然后:
@{
int i = 0;
}
@SomeHelper.Text(i)
或者你可以简单地使用,这将照顾一切,并摆脱那些佣工的编辑模板。 例如:
@Html.EditorFor(x => x.Ans)
你可以通过改变基类为视图实现这一目标。 此方案适用于其中帮手鉴于申报的情况。
创建从继承的基类WebViewPage和介绍共享字段或属性:
public class MyBasePage<T> : WebViewPage<T>
{
public int i;
public override void Execute()
{ }
}
使用@inherits
指令改变基类。 而现在字段/属性既是从“页面上下文”和辅助acessible:
@inherits NamespaceOfYourBaseClass.MyBasePage<YourModel>
@{
i = 0;
}
@helper Text() {
<input type="text" name="Ans[@i].Text" />
}
如果你想有一个东西是接近术语“页面属性/字段”,但不希望创建一个基类或助手均存储在App_Code
夹,然后你可以尝试WebPageBase.Page财产。
MSDN:提供证明页,布局页和部分页之间共享页面数据属性般的访问。
在这种情况下,代码如下:
@{
Page.i = 0;
}
@helper Text() {
<input type="text" name="Ans[@Page.i].Text" />
}
其缺点是, Page
属性的类型的dynamic
,因而不支持智能感知。 作为替代Page
还有另一个属性- WebPageBase.PageData 。
MSDN:提供到被页,布局页,和部分页之间共享页数据阵列状的访问。
在这种情况下串/整数密钥“页变量”一类的容器可以创建。 而代码将是这样的:
// class visible to views and helpers
class MyViewFields {
public const string i = "MyViewFields.i"; // or maybe generate guid for key so there would be not doubts about its uniqueness.. but how would you debug this? :)
}
// in MyView.cshtml
@{
PageData[MyViewFields.i] = 0
}
@helper Text() {
<input type="text" name="Ans[@PageData[MyViewFields.i]].Text" />
}
这至少提供约束共享页的数据,但仍超过值类型没有控制权。