2017-09-19 7 views
0

J'ai lu des centaines de messages sur ce problème et je ne trouve toujours pas de solution.Html.DropDownListFor la valeur sélectionnée par défaut ne fonctionne pas

S'il vous plaît aider avec cet horrible mystère;

Je voudrais avoir différentes valeurs par défaut dans mon DropDownListFor. Le "PartialViewList1 existe sur 4 éléments Je veux que le DropDownListFor pour sélectionner l'ID de l'élément actuel. (Item.id)

Mais en raison de tests, je viens de remplir" 3 "Et même cela doesn ' travail t.

les modèles sont correctement remplis, je suis en mesure d'ajouter plus de code du contrôleur, mais ce ne serait pas ajouter grand-chose. mais s'il vous plaît demander si vous voulez.

Et oui, je sais que ce est préférable de faire le SelectList dans le contrôleur, mais d'abord je veux le faire fonctionner

Voir:

@foreach (var item in Model.PartialViewList1) 
    { 
     <tr> 
      <td>Plaats: </td> 
      <td>@item.PlaceNumber</td> 
      <td> 
       @Html.DropDownListFor(x => x.PartialView.Id, new SelectList(Model.PartialViewList2, "Id", "Name", 3), 
       new { onchange = "this.form.submit();" })</td> 
     </tr> 
    } 

Screen shot of the users view

+0

Sa valeur de 'PartialView.Id' qui détermine ce qui est sélectionné (qui est la façon dont fonctionne la liaison modèle - il se lie ** ** à la valeur de votre propriété (la le dernier paramètre du constructeur 'SelectList' est ignoré lors de la liaison à une propriété). Mais votre code n'a aucun sens - vous générez plusieurs listes déroulantes pour la même propriété donc ce n'est pas clair ce que vous essayez de faire ici –

+0

J'ai 4 vues partielles sur un écran. Je veux que l'utilisateur puisse changer la vue partielle par endroit disponible sur l'écran. J'utilise donc "PartialViewList1" pour obtenir le numéro de lieu par partialview. Et j'utilise "PartialViewList2" pour obtenir les noms des vues partielles. Mais j'ai trouvé ce que vous avez dit sur cette page: https://nimblegecko.com/how-to-set-default-selected-value-on-drop-down-list-from-database/ sous le paragraphe: " DANGER, ATTENTION, IL YA DES DRAGONS. " –

+0

Oui par pourquoi générez-vous 4 listes déroulantes? Et ils se lient tous à la même propriété qui n'a aucun sens –

Répondre

0

J'espère que peut-être quelqu'un peut l'utiliser pour son problème.

Avec Stephen Mueke, j'ai trouvé la solution. Le problème est que si "x => x.PartialView.Id" a déjà une valeur alors la valeur par défaut: "3" sera remplacée par l'Id.

Et vous ne pouvez pas générer plusieurs DropDownlistFor en les liant à la même propriété.

Ma solution sur mon problème:

Vue:

@using (Html.BeginForm("_PartialSettingsDropDownList1", "Home")){ 
<table> 
    @for (int i = 0; i < Model.maxNumberOfViews; i++) 
    { 
     <tr> 
      <td> 
       Plaats @(i+1) 
      </td> 
      <td> 
       @Html.DropDownListFor(x => Model.PartialViewList[i].ID, new SelectList(Model.PartialViewList, "Id", "Name", Model.PartialViewList[i].ID), "select") 
      </td> 
     </tr> 
    } 
</table> 

@Html.HiddenFor(x => x.maxNumberOfViews) 

<input class="submit" type="submit" value="Submit" />} 

Controller:

[HttpGet] 
    public PartialViewResult _PartialSettingsDropDownList1() 
    { 
     PartialScreenViewModel viewModel = new PartialScreenViewModel(); 
     viewModel.PartialViewList = homeModel.AllBoxViews(databaseRepository.PartialViews); 
     viewModel.maxNumberOfViews = viewModel.PartialViewList.Count(); 

     return PartialView(viewModel); 
    } 

    [HttpPost] 
    public RedirectResult _PartialSettingsDropDownList1(PartialScreenViewModel viewModel) 
    { 
     for (int i = 0; i < viewModel.maxNumberOfViews; i++) 
     { 
      PartialView viewOnScreen = databaseRepository.PartialViews.FirstOrDefault(x => x.ID == viewModel.PartialViewList[i].ID); 
      databaseRepository.UpdatePartialView(viewOnScreen, i+1); 
     } 

     return new RedirectResult("Settings"); 
    } 

Modèle:

public List<PartialView> AllBoxViews(IEnumerable<PartialView> allViews) 
    { 
     List<PartialView> OnlyBoxViews = new List<PartialView>(); 
     foreach (var item in allViews.Where(item => item.Type.Equals("box"))) 
     { 
      OnlyBoxViews.Add(item); 
     } 

     return OnlyBoxViews; 
    } 

ViewModel:

public class PartialScreenViewModel 
{ 
    public List<PartialView> PartialViewList { get; set; } 
    public int maxNumberOfViews { get; set; } 
} 

Résultat à l'écran: screenshot