2009-03-05 28 views
5

Tôi đang sử dụng RC1 của ASP.NET MVC.Kiểu liên kết mô hình mặc định và các loại phức tạp bao gồm danh sách

Tôi đang cố gắng mở rộng Phil Haack's ví dụ ràng buộc mô hình. Tôi đang cố gắng sử dụng các mô hình mặc định chất kết dính để ràng buộc các đối tượng sau đây:

public class ListOfProducts 
{ 
    public int Id { get; set; } 
    public string Title{ get; set; } 
    List<Product> Items { get; set; } 
} 

public class Product 
{ 
    public string Name { get; set; } 
    public decimal Price { get; set; } 
} 

Tôi đang sử dụng mã từ ví dụ Phil với một số thay đổi:

Bộ điều khiển:

using System.Collections.Generic; 
using System.Web.Mvc; 

namespace TestBinding.Controllers 
{ 
    [HandleError] 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

      return View(); 
     } 

     //Action method on HomeController 
     public ActionResult UpdateProducts(ListOfProducts productlist) 
     { 
      return View(productlist); 
     } 
    } 

    public class Product 
    { 
     public string Name { get; set; } 
     public decimal Price { get; set; } 
    } 

    public class ListOfProducts 
    { 
     public int Id { get; set; } 
     public string Title { get; set; } 
     List<Product> Items { get; set; } 
    } 
} 

Xem :

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

    <asp:Content ID="indexHead" ContentPlaceHolderID="head" runat="server"> 
     <title>Home Page</title> 
    </asp:Content> 

    <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server"> 
     <form method="post" action="/Home/UpdateProducts"> 
      <input type="text" name="productlist.id" value="99" /> 
      <input type="text" name="productlist.Title" value="SomeTitle" /> 

      <input type="hidden" name="productlist.Index" value="0" /> 
      <input type="text" name="productlist.items[0].Name" value="Beer" /> 
      <input type="text" name="productlist.items[0].Price" value="7.32" /> 

      <input type="hidden" name="productlist.Index" value="1" /> 
      <input type="text" name="productlist.Items[1].Name" value="Chips" /> 
      <input type="text" name="productlist.Items[1].Price" value="2.23" /> 

      <input type="hidden" name="productlist.Index" value="2" /> 
      <input type="text" name="productlist.Items[2].Name" value="Salsa" /> 
      <input type="text" name="productlist.Items[2].Price" value="1.23" /> 

      <input type="submit" /> 
     </form> 
    </asp:Content> 

Vấn đề của tôi là các loại đơn giản (Id và tiêu đề) xuất hiện trong danh sách sản phẩm ct, nhưng không phải Danh sách. Vì vậy:

  • Mã của tôi có xấu không (sẽ không ngạc nhiên)?
  • Trình kết nối mô hình mặc định có thể xử lý các đối tượng ListOfProducts không?
  • Nếu trình kết nối mô hình mặc định sẽ không xử lý loại đối tượng này thì tôi cần phải làm gì (ví dụ nếu có thể)?

Xin cảm ơn trước.

Trả lời

6

Để trả lời câu hỏi của riêng tôi:

Tôi là giả!

Ví dụ của tôi không hoạt động vì mục tài sản của lớp ListOfProducts không được công khai:

public class ListOfProducts 
{ 
    public int Id { get; set; } 
    public string Title{ get; set; } 
    List<Product> Items { get; set; } 
} 

tôi đã thay đổi:

List<Product> Items { get; set; } 

tới:

public List<Product> Items { get; set; } 

và tôi sau đó làm việc.

Để kết luận trình kết nối mô hình mặc định không hoạt động với các loại có chứa các thuộc tính của Danh sách loại.

+3

Bạn không phải là giả. Tôi đã có cùng một vấn đề, nhưng đó là vì danh sách của tôi không phải là tài sản.Tôi đã có một cái gì đó tương tự như: Danh sách công khai Các mặt hàng, thay vì Danh sách công khai Các mặt hàng {get; bộ; } –

4

Bắt đầu với RC 1:

  • Hidden Index không còn cần thiết
  • Số trong [] phải bắt đầu với 0 và phải sấn.

Con số của bạn có vẻ OK.

Ngoài ra, tôi nhận thấy rằng bạn đã sử dụng vỏ khác nhau trên tên thuộc tính của các mặt hàng của bạn. Điều đó không nên tạo sự khác biệt, nhưng nó đáng để kiểm tra.

+1

Xin chào Craig, Cảm ơn các mẹo đã được đánh giá cao. –

+1

+1 đã lưu ngày của tôi – alexandrul

Các vấn đề liên quan