2013-08-15 4 views
1

J'ai deux entités Rack et Server. Où chaque serveur a une clé étrangère au rack parent. Actuellement, j'affecte un serveur à un Rack, en utilisant une liste déroulante comme suit dans la vue de création du serveur. Serveur Créer méthode d'action se présente comme suit: -Comment présélectionner une liste d'options déroulante basée sur la clé parente

public ActionResult Create() 
     { 
      PopulateViewBagData(); 

      return View(new ServerJoin() { IsIPUnique = true, 
      IsMACUnique = true}); 
     } 

Une partie du serveur créer vue qui comprennent une liste déroulante pour sélectionner le rack comme suit: -

@model TMS.ViewModels.ServerJoin 
<div> 
    <span class="f"> Rack</span> 

    @Html.DropDownListFor(model =>model.Server.RackID, ((IEnumerable<TMS.Models.TMSRack>)ViewBag.Racks).Select(option => new SelectListItem { 
     Text = (option == null ? "None" : option.Technology.Tag), 
     Value = option.TMSRackID.ToString(), 
     Selected = (Model.Server != null) && (option.TMSRackID == Model.Server.RackID) 
    }), "Choose...") 
    @Html.ValidationMessageFor(model =>model.Server.RackID) 
</div> 

Ce que je suis en train de Implement, est que dans la vue rack Je veux ajouter un lien pour ajouter un serveur, et pour forcer la liste déroulante rack pour sélectionner le rack actuel, quelque chose comme: -

@HTML.Actionlink(“Create Server under this rack”, “Create”,”Server”, new {rackID = Model.RackID},null) 

Mais je ne suis pas sûr de savoir comment forcer la liste déroulante à sélectionner le rackID passé, en gardant à l'esprit que l'utilisateur peut toujours créer un serveur sans aller à un rack, le rackID sera nul ??

Une idée de comment implémenter cela? BR

+0

Vous devez également afficher le code dans votre vue Rack. Mais pour l'instant, votre 'ViewBag.Racks' devrait contenir le' IEnumerable '. Vous ne devriez pas avoir de requête dans votre vue. Cela devrait être dans votre contrôleur. – ataravati

Répondre

1

Voici comment vous devriez le faire:

public ActionResult Create(int? rackID) 
{ 
    var model = new ServerJoin() { IsIPUnique = true, IsMACUnique = true}; 
    if(rackID.HasValue) 
    { 
     model.RackID = rackID.Value; 
    } 
    PopulateViewBagData(); 

    return View(model); 
} 

Ensuite, dans votre vue, vous pouvez utiliser une clause if pour remplacer le DropDownList avec une entrée cachée si le modèle a un RackID. Le ActionLink dans votre vue en rack est correct.

Questions connexes