2013-06-10 17 views
6

Ich habe eine Tabelle mit verschiedenen Zeilen und jede Zeile entspricht einer ID. Für jede Zeile habe ich die EDIT-Option, die es dem Benutzer ermöglicht, die Standardwerte für diese ID in den Feldern 'Edit.chtml' zu betrachten und dort zu aktualisieren, indem die Standardwerte gelöscht und neu eingegeben werden eingeben und speichern.Html.dropdownlist zeigt nicht den Standard/ausgewählten Wert im Dropdown-Feld

In ‚Edit.chtml‘, habe ich ein Feld für „Manager“, die ich mit default/ausgewähltem Wert mit einem Dropdown von Namen füllen muß angezeigt, entsprechend die ID der Zeile, wo Bearbeiten Betrieb ausgewählt ist aus Der Tisch. Ich benutze viewBag aber mein Problem ist die Dropdownliste zeigt immer das erste Element in der Liste und nicht den ausgewählten Wert. Bitte beachten Sie den folgenden Code.

Controller: 
// 
     // GET: /ManagersNAMES/Edit/5 

     public ActionResult Edit(int id) 
     { 
      using (var db = new InpEntities()) 
      { 
       var list_managers = (from x in db.TABLE_MANAGERS 
             select new TABLE_MANAGERSDTO 
             { 
              ID = x.ID, 
              NAME = x.NAME, 
             }).OrderBy(w => w.NAME).ToList(); 

       ViewBag.managers = new SelectList(list_managers, "ID", "NAME", id); 

       return View(); 
      } 
     } 

     public class TABLE_MANAGERSDTO 
     { 
      public string NAME { get; set; } 
      public int ID { get; set; } 
     } 

     // 
     // POST: /ManagersNAMES/Edit/5 

     [HttpPost] 
     public ActionResult Edit(int id, TABLE_INSTITUTES dp) 
     { 
      try 
      { 

       using (var db = new InpEntities()) 
       { 

        TABLE_INSTITUTES tmp = (TABLE_INSTITUTES)db.TABLE_INSTITUTES.Where(f => f.ID == id).First(); 
        tmp.MANAGER = dp.MANAGER; 
        db.SaveChanges(); 
        return RedirectToAction("Index"); 
       } 
      } 
      catch 
      { 
       return View(); 
      } 
     } 

Ausblick: 'Edit.chtml'

@{ 
    ViewBag.Title = "Edit"; 
} 

<h2>Edit</h2> 
@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 

    <div class="editor-label" style="font-weight:bold">MANAGER</div> 
    <div class="editor-field"> 
     @Html.DropDownList("dp.MANAGER", (SelectList)ViewBag.managers) 
    </div> 

    <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

Antwort

2

Sie benötigen die gewählte ID in der Steuerung wie folgt festgelegt:

var list_managers = list_managers.Select(x => new 
          { 
           Value = x.ID.ToString(), 
           Text = x.Name 
          }) 
          .ToList(); 

ViewBag.managers = new SelectList(list_managers, "ID", "NAME", id); 

Und Ihre Ansicht ändern:

@Html.DropDownList("dpMANAGER", (SelectList)ViewBag.managers) 
+0

Vielen Dank für Ihre Hilfe. Es beschwert sich über Value = x.ID "Kann Int nicht implizit in String konvertieren" Ich habe versucht, es zu konvertieren, funktioniert aber nicht – sunskin

+0

Sorry, ich habe es nicht getestet, da ich nicht den vollständigen Code habe. Bitte versuchen Sie die toString() wie oben. – hutchonoid

+0

Danke ich habe das versucht. Das scheint in Ordnung zu sein. Allerdings habe ich dieses Problem - "kann Typ nicht konvertieren" System.Collections.Generic.List "zu" System.Web.Mvc.SelectList "" – sunskin

2

Nur schrieb @Html.DropDownList("dp.MANAGER", ViewBag.managers) ohne Auswahlliste, weil es bereits in Art von SelectList.

Und schreiben ViewBag.managers = new SelectList(list_managers, "ID", "NAME"); ähnliche

+0

Danke Timur für deine Antwort! Ich musste SelectList in Dropdownliste verwenden, da es einen Fehler auslöst – sunskin

Verwandte Themen