2017-07-13 10 views
0

私はMVCを初めて使い、この問題の良い解決策を探していましたが、作品の種類。私がビューを作成するために行くと、私はdatacontextによって作成されたモデルを選択し、それは私のためのページを自動生成します。これがベストプラクティスでない場合は、これをどうやって別の方法で行うのかについての説明があります。ViewBagなしでMVC + Entity Frameworkを使用してドロップダウンをバインドする

次に、この質問のトピックについて説明します。ドロップダウンメニューを作成する。私はViewBagを使用していますが、これはうまく動作しますが、これはベストプラクティスではないことがわかります。

これは、エンティティによって生成された私のInventoryRecordクラスから直接である:前述したように、私の見解は、いくつかの変更を私のために作成したものエンティティによって移入され

namespace Inventory.DataContext 

public partial class InventoryRecord { 

    public Nullable<int> TypeId { get; set; } 

} 

:次に

@model Inventory.DataContext.InventoryRecord 
<div class="form-group"> 
     <label class="control-label col-md-2" for="TypeId">Type</label> 
     <div class="col-md-10"> 
      @Html.DropDownList("TypeId", null, "Select...", htmlAttributes: new { @class = "form-control", required = "required" }) 
      @Html.ValidationMessageFor(model => model.TypeId, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

私はこれを持っています:

private InventoryDataSource db = new InventoryDataSource(); 
ViewBag.TypeId = new SelectList(db.Types.OrderBy(x => x.TypeDesc), "Id", "TypeDesc", type); 

これはうまくいきますが、 ViewBagを使用せずにこれを行う方法を知りたい。私はこのページにいくつかの他のドロップダウンメニューを用意しています。MVCの使い方を習得したいと思います。

+1

【のviewmodels(http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp-net-mvc-applications /)。ビューに必要なものはすべて、ビュー・モデルに入れる必要があります。エンティティモデルを渡すことはお勧めしません。 –

答えて

0

スティーブが言ったように、エンティティモデルを渡さないでください。ビューのビューモデルクラスは常に作成してください。

は、ビューモデルクラスを追加します。

public class InventoryRecordModel 
{ 
    [Required] 
    public int TypeId; 
    //some other properties 
} 

変更ビューをする:

@model InventoryRecordModel 
<div class="form-group"> 
    <label class="control-label col-md-2" for="TypeId">Type</label> 
    <div class="col-md-10"> 
     @Html.DropDownList("TypeId", null, "Select...", htmlAttributes: new { @class = "form-control", required = "required" }) 
     @Html.ValidationMessageFor(model => model.TypeId, "", new { @class = "text-danger" }) 
    </div> 
</div> 

そのままコントローラを保管してください。

0

提案alawaysはのviewmodelに行くと、ここでビューで

public class RoleViewModel 
    { 
     public int Id { get; set; } 

     [Required] 
     [Display(Name = "Role :")] 
     public string RoleCode { get; set; } 

     public IEnumerable<RoleViewModel> GetRoles() 
     { 
      return new List<RoleViewModel> 
          { 
           new RoleViewModel() {Id = 1, RoleCode = "Role 1"}, 
           new RoleViewModel() {Id = 2, RoleCode = "Role 2"}, 
           new RoleViewModel() {Id = 3, RoleCode = "Role 3"} 
          };    
     } 
    } 

のコード例であるとして:

@Html.DropDownListFor(m => m.RoleCode, new SelectList(new MvcApplication1.Models.RoleViewModel().GetRoles(), "Id", "RoleCode")) 

注:ちょうどあなたの要件に応じて変更し、それが確実に動作します。

おかげ

カルティク

関連する問題