Получить сгенерированный элемент «name» для расширения HtmlHelper - PullRequest
0 голосов
/ 23 мая 2011

Я создаю свои собственные расширения HtmlHelper для стандартных DropDownLists, которые появляются во многих моих представлениях.В других элементах я использую «EditorFor», и бритва генерирует для меня правильный атрибут «name» элемента, поскольку для него важно правильно привязать модель.Как получить правильное имя в моем представлении, чтобы мои помощники называли элемент соответствующим образом?

В настоящее время мой код представления выглядит следующим образом, но я бы не стал жестко кодировать имя элемента, если смогу избежать его.

<tr>
    <td class="editor-label">
        County:
    </td>
    <td class="editor-field">
        @Html.CountyDropDown("CountyID")
    </td>
</tr>

Вот мой код расширения (который возвращает список округов в зависимости от региона текущего пользователя):

<Extension()> _
Public Function CountyDropDown(ByVal html As HtmlHelper, ByVal name As String) As MvcHtmlString
    Dim db As New charityContainer
    Dim usvm As New UserSettingsViewModel


    Dim ddl As IEnumerable(Of SelectListItem)
    ddl = (From c In db.Counties Where c.RegionId = usvm.CurrentUserRegionID
                            Select New SelectListItem() With {.Text = c.Name, .Value = c.Id})

    Return html.DropDownList(name, ddl)
End Function

1 Ответ

0 голосов
/ 23 мая 2011

Я тупица, я уже знал, как это сделать:

1) Дали моему значению идентификатора UIHint во ViewModel примерно так:

<UIHint("County")>
Public Property CountyId As Nullable(Of Integer)

2) Изменил мой вид, чтобы просто использовать Editor для этого:

    <td class="editor-field">                
        @Html.EditorFor(Function(x) x.CountyId)
    </td>

3) Сделал частичное представление "County.vbhtml" в моей папке EditorTemplates:

@ModelType Nullable(Of Integer)
@Html.DropDownList("", Html.CountySelectList(Model))

4) Возвращено только IEnumerable (Of SelectListItem) от моего помощника, а не весь раскрывающийся html:

    Public Function CountySelectList(Optional ByVal selectedId As Nullable(Of Integer) = 0) As IEnumerable(Of SelectListItem)
        Dim db As New charityContainer
        Dim usvm As New UserSettingsViewModel
        Dim CurrentUserRegionID = usvm.CurrentUserRegionID

        Dim ddl As IEnumerable(Of SelectListItem)
        ddl = (From c In db.Counties Where c.RegionId = CurrentUserRegionID
                                Select New SelectListItem() With {.Text = c.Name, .Value = c.Id, .Selected = If(c.Id = selectedId, True, False)})

        Return ddl
    End Function
...