2011-05-08 50 views
1

我有幾個基本模型,一個用於產品,一個用於類別。 如何在模型中將兩者關聯起來,以便在添加新產品時,我可以從DropDownList中選擇產品所屬的類別?我正在使用ASP.NET MVC 3 - 使用工具更新和Razor語法與HTML 5標記。帶代碼優先模型的MVC DropDown列表

我一直試圖讓這個工作沒有運氣,有人可以請指點我在正確的方向。

回答

1

我得到它的工作...剛看了驢友11主題演講與斯科特Hansselmen。

工作代碼...

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; }  
    public string Description { get; set; } 

    public int CategoryId { get; set; } 
    public Category Category { get; set; } 
} 

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 

    public virtual ICollection<Product> Products { get; set; } 
} 

現在創建控制器時,MVC會產生對產品的catetgories一個下拉列表創建頁面。因此,您可以選擇產品所屬的類別。

0

產品實體需要有類別的屬性,就可以創建所有類別下拉,使其選擇所選擇的產品類別。

我知道有這這裏在網站上的例子,但是你可以容易找到與谷歌的幫助的例子。

1

假設你有兩個表是這樣的(和它們相關的類):

產品

  • 的ProductID
  • 類別ID
  • 產品名稱
  • ....

類別

  • 類別ID
  • 類別名稱
  • ...

創建一個助手一個新的類,然後添加一個類型的方法IEnumerable < SelectListItem>返回一個

public class ListHelper 
    { 
     public static IEnumerable<SelectListItem> GetCategoryList() 
     { 
      using (SiteDataContext db = new SiteDataContext()) 
      { 
       var list = from l in db.Categories() 
          orderby l.CategoryName 
          select new SelectListItem { Value = l.CategoryID.ToString(), Text = l.CategoryName }; 

       return list.ToList(); 
      } 
     } 
    } 
:分類的(值,文字)的格式列表

在你看來,增加一個組合框使用此方法:

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Category</legend> 
     <div class="editor-label"> 
      Select a category: 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownListFor(model => model.CategoryID, Helpers.ListHelper.GetCategoryList()) 
     </div> 
    </fieldset> 
    <fieldset> 
     <legend>Product</legend> 

     <div class="editor-label"> 
      Product Name: 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.ProductName) 
      @Html.ValidationMessageFor(model => model.ProductName) 
     </div> 

     ... 

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

然後在你的行動後剛剛獲得的產品對象,並將其保存到數據庫:

 [HttpPost] 
     public ActionResult Add(Product product) 
     { 
      if (ModelState.IsValid) 
      { 
       productService.InsertProduct(product); 
       productService.Save(); 
       ... 
      } 
      else 
      { 
       return View(product); 
      } 
     }