Как вы повторно используете частичный вид с настройкой разных идентификаторов

StackOverflow https://stackoverflow.com/questions/2574462

Вопрос

У меня есть частичный вид с раскрывающимся в нем. Код выглядит так:

 <%=Html.DropDownListFor(x => Model.Exercises, new SelectList(Model.Exercises, "Id", "Name", Model.SelectedExercise), new { @id = "exerciseDropdown", @class = "autoComplete" })%>

В том, что я хочу использовать этот частичный вид в нескольких местах, но я хочу иметь другой идентификатор, назначенный для управления (вместо того, чтобы использование всегда), но снаружи у меня есть только это:

 <% Html.RenderPartial("ExerciseList", Model); %>

Есть ли в любом случае, чтобы пройти в идентификатор в частичный вид? Есть ли стандартный способ ввести идентификаторы в частичный вид?

Прямо сейчас я делаю такие вещи:

 <% Html.RenderPartial("ExerciseList", Model); %>
 <% Html.RenderPartial("ExerciseList2", Model); %>

Там, где упражнение и упражнение2 идентичны, но с разными идентификаторами, но я уверен, что есть лучший способ.

Это было полезно?

Решение

Похоже, вы используете одну и ту же модель, чтобы выполнять частичные виды. Я вижу два варианта для настройки этого.

  1. Как сказал Ник выше, используйте частичный класс и добавьте свойство DropDownid в вашу модель.

** Предупреждение Pseudo VB-код впереди

Partial Public Class Exercise
Dim _ddID as string

Public Property DropDownID as string
    Get
        Return _ddID
    End Get
    Set(byval value as string)
        _ddID = value
    End Set
End Property

Тогда в вашем контроллере:

Function Index() as ActionResult
    Exercise = getExercise() 'call to get your exercise model'
    Exercise.DropDownID = "DropDownID1"
    Return View(Exercise)
End Function

Вид:

 <%=Html.DropDownListFor(x => Model.Exercises, new SelectList(Model.Exercises, "Id", "Name", Model.SelectedExercise), new { @id = model.DropDownID, @class = "autoComplete" })%> 

Вариант 2: установить в вашем словаре ViewData

Контроллер:

Function Index() as ActionResult
    Exercise = getExercise() 'call to get your exercise model'
    ViewData("ExerciseID") = "DropDownID1"
    Return View(Exercise)
End Function

Вызов частичного представления:

<% Html.RenderPartial("ExerciseList", Model, ViewData); %> 

Вид:

 <%=Html.DropDownListFor(x => Model.Exercises, new SelectList(Model.Exercises, "Id", "Name", Model.SelectedExercise), new { @id = ViewData("ExerciseID"), @class = "autoComplete" })%> 

Другие советы

Вы можете просто включить идентификатор, который вы хотите использовать в модели.

В моем случае я хотел разные идентификаторы, потому что календарь jQuery не смог записать дату требуемого поля ввода. Вместо этого он был писать дату в первое поле с тем же идентификатором.

Итак, я не был на самом деле не обеспокоен удостоверением личности. Так что использовал что-то вроде

@Html.TextBoxFor(model => model.DueDate, new Dictionary<string, Object> { { "class", "datepicker" }, { "id", Guid.NewGuid().ToString() } })
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top