2009-07-09 26 views
5

tôi đã sửa đổi ứng dụng Nerd Dinner để cho phép chỉnh sửa các hồ sơ trẻ em bằng cách thêm mã sau vào DinnerForm.ascxĐang cập nhật Phụ Huynh/ghi với chất kết dính mô hình trong ASP.Net MVC Child

<p> 
    <%int i = 0; 
    foreach (NerdDinner.Models.RSVP rsvp in this.Model.Dinner.RSVPs) 
     { %> 

     <%= Html.Hidden("Dinner.RSVPs[" + i + "].RsvpID", rsvp.RsvpID)%> 
     <%= Html.Hidden("Dinner.RSVPs[" + i + "].DinnerID", rsvp.DinnerID)%> 
     <%= Html.TextBox("Dinner.RSVPs[" + i + "].AttendeeName", rsvp.AttendeeName)%> 
    <% i += 1; 
    } %> 
    </p> 

nó được render này:

<p> 
    <input id="Dinner_RSVPs[0]_RsvpID" name="Dinner.RSVPs[0].RsvpID" type="hidden" value="36" /> 
     <input id="Dinner_RSVPs[0]_DinnerID" name="Dinner.RSVPs[0].DinnerID" type="hidden" value="63" /> 
     <input id="Dinner_RSVPs[0]_AttendeeName" name="Dinner.RSVPs[0].AttendeeName" type="text" value="kp" /> 
    <input id="Dinner_RSVPs[1]_RsvpID" name="Dinner.RSVPs[1].RsvpID" type="hidden" value="37" /> 
     <input id="Dinner_RSVPs[1]_DinnerID" name="Dinner.RSVPs[1].DinnerID" type="hidden" value="63" /> 
     <input id="Dinner_RSVPs[1]_AttendeeName" name="Dinner.RSVPs[1].AttendeeName" type="text" value="jim" /> 

    </p> 

Tôi chưa sửa đổi phương thức hành động Bài đăng của DinnersControler. Bữa tối của cha mẹ được cập nhật như bình thường, nhưng nó xuất hiện trong UpdateModel (bữa tối); không thấy/cập nhật hồ sơ RSVP cho trẻ em.

Tôi đã thử một vài biến thể để hiển thị bản ghi con để trình kết nối Mô hình sẽ thấy bộ sưu tập, không có may mắn.

Đang cập nhật hồ sơ gốc/con trong một lần chụp bằng cách gọi UpdateModel (Phụ huynh); có thể với các chất kết dính mô hình hiện tại?

Trả lời

4

Tôi chưa thể tự làm điều này.

Tôi biết rằng bạn có thể cập nhật một phần tử con, ví dụ: Dinner.RSV tự động. Tôi đã không bao giờ nhìn thấy khả năng cập nhật một con enumerable, mà sẽ yêu cầu ràng buộc để biết được tài sản là ID và tìm nó (tức là, Dinner.RSVP.Where (r => r.RSVP_ID == input_id) và sau đó cập nhật điều đó). Tôi không biết đủ về ràng buộc tùy chỉnh để làm một cái gì đó như thế.

Tuy nhiên, những gì tôi đã làm là để làm một vòng lặp và chỉ định RSVP và int như một tiền tố:

Vì vậy, bạn cần làm:

UpdateModel("Dinner", Dinner); 

để cập nhật các phụ huynh và sau đó:

int i = 0; 

foreach (var r in Dinner.RSVPs) { 
    UpdateModel(r, "Dinner.RSVPs[" + i++ + "]"); 
} 

Không hoàn toàn sạch sẽ, nhưng nó hoạt động tốt cho tôi. Tuy nhiên, có thể mất thêm một chút nỗ lực để xây dựng trong quá trình xác thực (bạn muốn xác thực tất cả cùng một lúc và đảm bảo rằng bạn không quay trở lại chế độ xem trên RSVP đầu tiên có lỗi).

EDIT: Cố định mã phản ánh giải pháp của OP, bao gồm lỗi trong thứ tự tham số của tôi. Với điều đó đang được nói, tôi cảm thấy thoải mái hơn khi sử dụng thuộc tính RSVP.ID so với một số nguyên đang chạy. Miễn là bạn biết rằng Dinner.RSVPs sẽ giống nhau trên POST như GET (tôi tự tin về điều này trong mã của tôi), sau đó sử dụng RSVP.ID sẽ hoạt động. RSVP có nên khác nhau không, sau đó chỉ những người có mặt trên cả hai sẽ được cập nhật. Tuy nhiên, việc sử dụng int tuần tự có thể làm cho đối tượng sai được cập nhật.

Hy vọng rằng sẽ giúp, James

+0

@jamesshannon Câu trả lời này kết thúc. Sửa Mô hình cập nhật của bạn trong vòng lặp để đọc int i = 0; foreach (RSVP r trong Dinner.RSVPs) { UpdateModel (r, "Dinner.RSVPs [" + i + "]"); i ++; } và chúng tôi có thể đánh dấu công việc này/đã trả lời. –

0

Ok, vì vậy không ai trả lời. Tôi không biết ứng dụng nerddinner nhưng quan tâm đến vấn đề của bạn. Đã hy vọng sẽ thấy một số câu trả lời nhưng, tốt, không có được nêu ra. Không chắc chắn 100% vì thiếu sự quen thuộc với ndinner, nhưng nó có thể liên quan đến this post nơi họ đề cập đến ràng buộc/cập nhật chỉ khi một tài sản được thông qua một cách rõ ràng?

0

Câu hỏi của bạn là liệu cập nhật hồ sơ phụ huynh/trẻ em trong một shot bằng cách gọi UpdateModel (mẹ); có thể với các chất kết dính mô hình hiện tại?

Có, điều này là có thể.Tuy nhiên, nó là không phải có thể (không có một số cách giải quyết nhỏ) nếu bạn đang sử dụng LINQ-to-Sql và các đối tượng con của bạn được tiếp xúc qua EntitySet<T> thay vì một cái gì đó như IList<T>. Tôi tin rằng điều này sẽ được (đã được?) Giải quyết trong phiên bản tiếp theo của MVC do ra với ASP.NET 4.0. Trong thời gian này, mặc dù, các mô hình mặc định MVC chất kết dính dường như không hiểu làm thế nào để làm việc với EntitySet.

Vui lòng xem điều này other answer Tôi đã viết trên một câu hỏi liên quan cách đây một thời gian, với chi tiết về cách tôi xử lý (làm việc xung quanh) tình huống này trong một số trường hợp đơn giản. Khi làm điều này, tôi đã phải lo lắng quá nhiều về cách "lý tưởng" giải pháp này là từ một quan điểm DDD/OOP, như một sự cân bằng để đơn giản nhận MVC và LTS để cùng nhau chơi với nỗ lực tối thiểu. Lưu ý, tôi sẽ thừa nhận rằng giải pháp của James S có lẽ là "tinh khiết", nhưng để làm điều này trong "một shot" khi bạn hỏi, bạn sẽ cần phải chờ ASP.NET 4.0, hoặc sử dụng một cách giải quyết tương tự như những gì bạn sẽ tìm thấy trong bài đăng khác của tôi.

Chúc may mắn!

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