@ Html.TextBoxFor для повторных свойств в модели - PullRequest
0 голосов
/ 07 июля 2011

Пожалуйста, помогите мне решить эту проблему.В настоящее время я пытаюсь сделать это в 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: «Шаблоны могут использоваться только с доступом к полям, доступом к свойствам, индексом одноразмерного массива или выражениями настраиваемого индексатора с одним параметром».Т_Т

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Вы можете украсить свои свойства с помощью атрибута [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>
0 голосов
/ 07 июля 2011

Дело в том, что от 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>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...