2010-04-04 14 views
3

J'ai une vue partielle avec une liste déroulante. le code ressemble à ceci:Comment réutiliser une vue partielle avec des ID différents?

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

Le problème est que je veux réutiliser cette vue partielle en plusieurs endroits, mais je veux avoir un autre identifiant assigné au contrôle (au lieu de exerciseDropdown toujours), mais à l'extérieur, je seulement avoir ceci:

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

Y at-il de toute façon passer un ID dans une vue partielle? Existe-t-il un moyen standard pour injecter les ID dans une vue partielle?

En ce moment je fais des choses comme ceci:

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

où ExerciseList et ExerciseList2 sont identiques mais avec des ids mais je suis sûr qu'il ya une meilleure façon.

+0

Avez-vous besoin d'eux pour avoir des ID, ou juste des noms locaux au formulaire dans lequel ils se trouvent? –

+0

@Nick Craver - Je pense que j'ai besoin d'ids comme je veux que le code jquery capture l'événement click pour un traitement – leora

+0

@oo - Pouvez-vous poster le code jQuery que vous utilisez ... Je suis sûr que nous pouvons résoudre ce problème Ne nécessitant pas les ID :) –

Répondre

3

Il semble que vous utilisiez le même modèle pour les deux vues partielles. Je vois deux options pour mettre cela en place.

  1. Comme pour Nick, vous pouvez utiliser une classe partielle et ajouter la propriété dropDownID à votre modèle.

** Avertissement Pseudo code VB avant

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 

Ensuite, dans votre contrôleur:

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

Vue:

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

Option 2: Mettre dans votre dictionnaire ViewData

Controller:

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

Appel Vue partielle:

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

Voir:

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

Vous pouvez simplement inclure l'identifiant que vous souhaitez utiliser dans le modèle.

+0

@NickLarsen - pouvez-vous clarifier avec un exemple ici? – leora

0

Dans mon cas, je voulais des ID parce que le calendrier jQuery ne parvenait pas à écrire la date du nécessaire champ de saisie. Au lieu de cela, il était écrit date dans le premier champ avec le même ID. Donc, je n'étais pas vraiment concerné par l'ID. Donc utilisé quelque chose comme ceci-

@Html.TextBoxFor(model => model.DueDate, new Dictionary<string, Object> { { "class", "datepicker" }, { "id", Guid.NewGuid().ToString() } })