2009-11-06 26 views
2

使用Authors/Books目錄示例,假設我想編輯特定作者書籍的信息。ASP.NET MVC新手:在編輯中的多個對象的下拉表單中獲取/傳遞數據查看

當某人導航到domain.com/Books/Edit/2時,我想顯示所有書籍的編輯視圖,其中Author_ID = 2。各種書籍信息中包括書籍類別(小說,非小說類,教科書,無論什麼)這些類別在他們自己的表中,並被Category_ID引用。

設置編輯表單的最佳方式是什麼?

目前在我的控制器我有這樣的事情:

public ActionResult Edit(int id) 
     { 

      IQueryable<Book> books = bookRepository.FindBooksForAuthor(id); 
      return View(books); 
     } 

在我的部分觀點:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IQueryable<Authors.Models.Book>>" %> 

    <%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %> 

    <% using (Html.BeginForm()) {%> 

     <fieldset> 
      <legend>Fields</legend> 
      <%var i = 0; 
       foreach (var book in Model) 
       {%> 



      <p> 
       <label for="Category_ID">Category_ID:</label> 
       <%= Html.TextBox("Category_ID", book.Category_ID)%> 
       <%= Html.ValidationMessage("Category_ID", "*")%> 
      </p> 
      <p> 
       <label for="Description">Description:</label> 
       <%= Html.TextBox("Description", book.Description)%> 
       <%= Html.ValidationMessage("Description", "*")%> 
      </p> 

      <%i++; 
       } %> 
       <p> 
       <input type="submit" value="Save" /> 
      </p> 
     </fieldset> 

    <% } %> 

是我Inherits在視圖頂部設置正確,因爲我傳遞一個IQueryable對象?

更重要的是,如何將Category_ID字段設置爲選中正確類別的DropDown? 我是否可以將下拉列表的數據發送到視圖並在視圖級別找出所選項目?

ViewData["categories"] = new SelectList(_db.BookCategories.ToList().OrderBy(b => b.Category_Title), "Category_ID", "Category_Title"); 

回答

0

您可以創建視圖模型類包含圖書類別的選擇列表清單:

public class BooksEditViewModel 
{ 
    public IQueryable<Authors.Models.Book> Books { get; set; } 
    public IQueryable<BookCategory> BookCategories { get; set; } 
} 

然後用BooksEditViewModel作爲視圖模型

System.Web.Mvc.ViewUserControl<BooksEditViewModel> 

和代碼下拉與

Html.DropDownList("Category_ID", new SelectList(Model.BookCategories,"Category_ID", "Category_Title",book.Category_ID); 

你也應該瞭解列表綁定:

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

+1

這個鏈接是一個過時_bit_;例如你不需要隱藏索引。這一個更好:http://marcomagdy.com/2009/09/03/asp-net-mvc-model-binding-form-inputs-to-action-parameters/ – queen3 2009-11-06 21:06:54

+0

很高興知道。感謝您的補充澄清。 – LukLed 2009-11-06 21:21:58

+0

謝謝!正如我所提到的,這對我來說都是新的。我不知道「ViewModel」的概念。你把我放在正確的道路上,我不得不穀歌一點,發現這一點,這爲我奠定了一切:http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc- tip-50-ndash-create-view-models.aspx 謝謝。 – johnnycakes 2009-11-08 03:11:54

相關問題