@ Html.TextBoxFor用于模型中的重复属性

时间:2011-07-07 06:35:19

标签: asp.net vb.net asp.net-mvc-3 loops view

请帮我解决这个问题。我目前正在尝试在MVC3,VB.NET中执行此操作。

考虑以下模型:

Public Class SampleData
    Public Property PTY_1 as String
    Public Property PTY_2 as String
    Public Property PTY_3 as String
    '...snipped
    Public Property PTY_19 as String
    Public Property PTY_20 as String
End Class

目前在我看来,我有以下代码:

<tr><td>@Html.TextBoxFor(Function(model) model.PTY_1)</td></tr>
<tr><td>@Html.TextBoxFor(Function(model) model.PTY_2)</td></tr>
<tr><td>@Html.TextBoxFor(Function(model) model.PTY_3)</td></tr>
'...snipped
<tr><td>@Html.TextBoxFor(Function(model) model.PTY_19)</td></tr>
<tr><td>@Html.TextBoxFor(Function(model) model.PTY_20)</td></tr>

如您所见,我的视图中需要20行代码。有没有办法使用for循环,以便我的视图有更少的行?感谢。


更新1。我尝试将新属性PTY添加到我的模型中,以根据索引访问属性。因此PTY(2)= PTY_2。

Public Class SampleData
    Public Property PTY(index as Integer) as String
        Get
            Select Case index
                Case 1 : Return PTY_1
                Case 2 : Return PTY_2
                Case 3 : Return PTY_3
                '...snipped
                Case 19 : Return PTY_19
                Case 20 : Return PTY_20
                Case Else : Return ""
            End Select
        End Get
        Set (value as String)
            Select case index
                Case 1 : PTY_1 = value
                Case 2 : PTY_2 = value
                Case 3 : PTY_3 = value
                '...snipped
                Case 19 : PTY_19 = value
                Case 20 : PTY_20 = value
            End Select
        End Set
    End Property
End Class

至于视图,我尝试了以下代码:

@For index as Integer = 1 to 20
    <tr><td>@Html.TextBoxFor(Function(model) model.PTY(index))</td></tr>
End For

然而,当我加载视图时,我得到一个InvalidOperationException:“模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。” T_T

2 个答案:

答案 0 :(得分:1)

您可以使用[DataType(DataType.MultilineText)]属性并在视图中修饰您的媒体资源:

@Html.EditorForModel()

如果您愿意,可以使用[UIHint]属性自定义模板:

<DataType(DataType.MultilineText)> _
<UIHint("CustomTextArea")> _
Public Property PTY_1 as String

...

然后定义编辑器模板(~/Views/Shared/EditorTemplates/CustomTextArea.cshtml):

<tr><td>@Html.TextArea("")</td></tr>

答案 1 :(得分:0)

问题是PTY_1到PTY_20是您未来输入的名称 我用C#编写:)

@for (int i = 1; i <= 20; i++)
{
    string name = "PTY_" + i;
    <tr><td><input type="text" name="@name" /></td></tr>
}