2017-10-13 38 views
3

私はASP.NET MVCで新しく、問題があります。ASP.NET MVC - ドロップダウンリストからIDを取得

var CList = new List<string>(); 

StreetFooder sf = db.StreetFooders.Single(s => s.User.UserName == this.User.Identity.Name); 

var Cqry = from d in db.Categories 
where !d.IsDeleted && d.StreetFooder.Id == sf.Id 
orderby d.Name 
select d.Name; 

CList.AddRange(Cqry.Distinct()); 
ViewBag.CategoryList = new SelectList(CList); 

とビュー:

<div class="col-md-10"> 

@Html.DropDownListFor(model => model.Category, (SelectList)ViewBag.CategoryList, new { @class = "form-control" }) 

@Html.ValidationMessageFor(model => model.Category, "", new { @class = "text-danger" }) 
</div> 

そして、それは私のために働いていた私はそれが私のコードだった、ドロップダウンリストから文字列「カテゴリー」を入手する必要がありました。今、私は私のデシベルに文字列の代わりにIDを保存したいが、それでも時にドロップダウンリストから選択し、私の文字列を表示したい

public virtual Categories Type { get; set; } 

:その後、私は私がミスを犯し、中に私の文字列カテゴリの属性を変更し実現しました...しかし、どのようにわからない。 SelectListのを作成するための

+0

IDを取得する方法、送信またはJSで – SeM

+0

リストの代わりに()ciリストのkeyvalueペアリストを使用して今すぐ行ってください –

+0

あなたはあなたの 'Categories'から' Name'を渡すだけで、 'DropDownList'に' Id'を渡す必要もあります。 – SeM

答えて

0

はこれを試してみてください:

var cqry = from d in db.Categories 
      where !d.IsDeleted && d.StreetFooder.Id == sf.Id 
      orderby d.Name 
      select new { Id = d.StreetFooder.Id, Value = d.Name}; 

ViewBag.CategoryList = new SelectList(cqry.Distinct(), "Id", "Value"); 

あなたはまたIdを定義し、あなたのDropDownListにそれを渡す必要があります。リストの指定項目(cquery)、データ値フィールド(Id)、データテキストフィールド(Value)を使用してViewBagを追加し、DropDownListにバインドして、SelectListクラスの新しいインスタンスを初期化します。

あなたは、このようなビューでそれを使用することができます。

@Html.DropDownList("CategoryList ", null, new { @class = "form-control" }) 

cqry.Distinct()はあなたが名前だけで明確な必要がある場合は、コレクション内のIdValueは、同じであることを意味し、その結果に重複がある場合に動作しますgroup byを使用する必要があります。

1

使用SelectListItem、そこにはValue =自分のIDとText =表示テキスト

https://msdn.microsoft.com/en-us/library/system.web.mvc.selectlistitem(v=vs.118).aspx

var CList = new List<SelectListItem>(); 

StreetFooder sf = db.StreetFooders.Single(s => s.User.UserName == this.User.Identity.Name); 

var Cqry = from d in db.Categories 
where !d.IsDeleted && d.StreetFooder.Id == sf.Id 
orderby d.Name 
select d; 

CList.AddRange(Cqry.Distinct().Select(x => new SelectListItem 
{ 
    Value = x.Id.ToString(), 
    Text = d.Name 
})); 
ViewBag.CategoryList = new SelectList(CList); 

を指定することができますあなたもSelectListを使用して省略し、単にI場合List<SelectListItem>を渡すことができます正しくリコールする。

0

selectListでは、どのプロパティからドロップダウンvaluetextプロパティをバインドするかを渡すことができます。

var Cqry = from d in db.Categories 
    where !d.IsDeleted && d.StreetFooder.Id == sf.Id 
    group d by new { names.Name } into nameGroup 
    select new { Name = nameGroup.Name, Id = nameGroup.FirstOrDefault().StreetFooder.Id}; 


ViewBag.CategoryList = new SelectList(Cqry,"Id","Name"); 

あなたはDistinct名を選択したので、私は名前で、ここでグループを使用していました。

私はプロパティ 'Id'とNameを持つ匿名オブジェクトを作成しました。これで、SelectListにバインドできます。

関連する問題