Как вы повторно используете частичный вид с настройкой разных идентификаторов
-
24-09-2019 - |
Вопрос
У меня есть частичный вид с раскрывающимся в нем. Код выглядит так:
<%=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 идентичны, но с разными идентификаторами, но я уверен, что есть лучший способ.
Решение
Похоже, вы используете одну и ту же модель, чтобы выполнять частичные виды. Я вижу два варианта для настройки этого.
- Как сказал Ник выше, используйте частичный класс и добавьте свойство 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() } })