2013-06-10 19 views
6

Çeşitli satırlara sahip bir tablom var ve her satır bir ID'ye karşılık geliyor. Her satır için, seçildiğinde kullanıcının 'Edit.chtml' alanlarındaki ilgili ID'ye karşılık gelen varsayılan değerlere bakmasını ve orada varsayılan değerleri silerek ve yeni giriş ve kaydetme. 'Edit.chtml' deHtml.dropdownlist, açılan alan içinde varsayılan/seçili değeri göstermiyor

, I varsayılan/seçilen bir değere sahip bir isim DropDownList ile doldurmak gerekir düzenleme işlemi seçilmektedir sıranın ID'sine karşılık gelen görüntülenen "yönetici" için bir alan masa ViewBag kullanıyorum ama benim sorunum açılan listeden her zaman listedeki ilk öğeyi gösterir, seçilen değeri değil. Lütfen aşağıdaki kodu inceleyin.

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(); 
      } 
     } 

Görünüm:

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); 

Ve için görünümünüzü değiştirmek: '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> 

cevap

2

Böyle denetleyici içinde seçilen kimliği ayarlamanız gerekir

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

teşekkür gibi

Ve yazma ViewBag.managers = new SelectList(list_managers, "ID", "NAME");. Onun hakkında şikâyet = x.ID "dolaylı olarak int dizgeye dönüştürebilirim" Bunu çalıştırmaya çalıştım ama çalışmaz – sunskin

+0

Üzgünüm, tam kodum olmadığı için test etmedim. Lütfen yukarıdaki gibi toString() öğesini deneyin. – hutchonoid

+0

Teşekkürler bunu denedim. Thats tamam görünüyor. Ancak, bu sorun var - "System.Collections.Generic.List 'için' System.Web.Mvc.SelectList '' türünü dönüştüremiyorum" – sunskin

2

Sadece seçme listeniz olmadan @Html.DropDownList("dp.MANAGER", ViewBag.managers) yazdınız, onun zaten SelectList türünde olduğundan emin olun. Yardımlarınız için bu

+0

Cevabınız için teşekkürler Timur! Bir hata attığından, açılan listeden SelectList'i kullanmak zorundaydım – sunskin

İlgili konular