2010-05-01 19 views
6

MVC2, C# ve Linq to Entities öğelerini tek bir projede (evet, kızgınım) öğrenmeye çalışıyorum ve DropDownListFor ile ilgili bazı sorunlar yaşıyorum ve SelectList'i ona aktarıyorum. ASP.Net MVC2 DropDownListFor

Bu

benim denetleyicisi kodu:

public ActionResult Create() 
{ 
    var Methods = te.Methods.Select(a => a); 

    List<SelectListItem> MethodList = new List<SelectListItem>(); 

    foreach (Method me in Methods) 
    { 
     SelectListItem sli=new SelectListItem(); 
     sli.Text = me.Description; 
     sli.Value = me.method_id.ToString(); 
     MethodList.Add(sli); 
    } 

    ViewData["MethodList"] = MethodList.AsEnumerable(); 

    Talkback tb = new Talkback(); 
    return View(tb); 
} 

ve sıkıntılar DropDownListForViewData yılında MethodList almaya almaya çalışırken yaşıyorum. Ben çalıştığınızda:

<%:Html.DropDownListFor(model => model.method_id,new SelectList("MethodList","method_id","Description",Model.method_id)) %> 

Bu hataları aşağıdaki iletiyle bir dize olarak MethodList alıyor olarak

DataBinding: 'System.Char' does not contain a property with the name 'method_id'. 

Ben, bu yüzden biliyorum ama nasıl bilemiyorum SelectList almak. Ben yaparsanız normal DropDownList aşağıdaki:

<%: Html.DropDownList("MethodList") %> 

Bu oldukça mutludur.

Herkes yardımcı olabilir mi?

cevap

8

EDIT: Yani Entity Framework kullanıyorsunuz, evet?

public ActionResult Create() 
{ 
    var viewModel = new CreateViewModel(); // Strongly Typed View 

    using(Entities dataModel = new Entities()) // 'te' I assume is your data model 
    { 
     viewModel.Methods = dataModel.Methods.Select(x => new SelectListItem() 
     { 
       Text = x.Description, 
       Value = x.method_id.ToString() 
     }); 
    } 

    return View(viewModel); 
} 

Kişisel kesinlikle yazılı görünümü modeli olacaktır:

public class CreateViewModel 
{ 
    public string SelectedMethod { get; set; } 
    public IEnumerable<SelectListItem> Methods { get; set; } 
} 

görünümünüz kodu olurdu Eğer yorumları bölümüne eklenmesi bilgi ile o durumda, böyle bir şey yapmak ister ki:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CreateViewModel>" %> 
<%-- Note the Generic Type Argument to View Page! --%> 
<%: Html.DropDownListFor(m => m.SelectedMethod, Model.Methods) %> 
+1

Talkback sınıfı bir L2E tablo sınıfıdır. Yöntemler tablosu ile 0..1 ilişkisi olan bir method_id içerir, bu nedenle Talkback tablosundan method_id Scalar özelliğine ve bu kayıt yöntemine ilişkin belirli bir yönteme Yöntem gezinme özelliğine sahibim. Bu nedenle, bir oluşturma eylemi olduğu için, null olacak bir belirli bir talkback kaydı ile ilgili yöntemi alabilirim. Ancak, geri bildirme modeli aracılığıyla tüm yöntemlere erişemiyorum. Umarım mantıklıdır! – hermiod

+0

Ek kod ile güncellendi. Bunu dene ve bunun senin için işe yarayıp yaramayacağını gör! – Tejs

+0

Şimdi 'Yöntem için aşırı yüklenme yok' hatası aldım DropDownListFor '1 argüman' alır. Belki MVC'yi yanlış anlamışım ancak veritabanı modelinin tüm görünümlerini oluşturmanın ve gerektiğinde değiştirmenin mümkün olacağını düşündüm. Ben rasgele listelerden geçerek (orijinal kodumun dayandığı ViewData aracılığıyla) görüntüye geçişin bazı örneklerini görmüştüm, bu çalışmayı benim durumumda yapmanın bir yolu var mı? Yardımlarınız için teşekkürler Tejs – hermiod

İlgili konular