Không thể có được bộ não của tôi xung quanh như thế nào để thực hiện loại trực tiếp sau ASP.NET MVC 4 lồng nhau xem mô hình:ASP.NET MVC với mô hình điểm lồng nhau và Knockout
public class MyProfile
{
public string Name { get; set; }
public IList<VM1> List1 { get; set; }
public IList<VM2> List2 { get; set; }
....
public IList<VM10> List10 { get; set; }
}
// example of VM view model
public class VM1
{
IList<Label> Labels { get; set; }
IList<Contact1> Contact1 { get; set; }
}
Trong giao diện I accept mô hình như này:
@model MyProfile
@using (Html.BeginForm("Index", "Profile", FormMethod.Post, new { id = "profileEditorForm" }))
{
@Html.ValidationSummary(false)
<fieldset>
<legend>User's data</legend>
<label for="name">Name:</label>
<input type="text" id="name" name="name" class="required" data-bind="value: Name"/>
</fieldset>
@Html.EditorFor(m => @Model.List1, "List1") @* Editpr model for List1*@
@Html.EditorFor(m => @Model.List2, "List2")
.....
@Html.EditorFor(m => @Model.List10, "List10")
<p>
<input type="submit" value="Save" data-bind="enable: (List1().length > 0) && (List2().length > 0) && ...(List10().length > 0)" />
<a href="/">Cancel</a>
</p>
}
Các EditorTemplate cho List1
sẽ trông như thế này với nhiều câu hỏi trong:
@model IList<FiveW.ViewModels.List1>
<fieldset>
<table>
<tbody data-bind="foreach: Contact1">
<tr>
<td>
<label>Email:</label></td>
<td>
@* How do you put combobox here with labels here?
How do you tie selected label to selected property on your Contact1 object *@
@*<select data-bind="options: Labels, optionsText: 'LabelName', value: selectedLabel, optionsCaption: 'Choose...'"></select></td>
<td>
<input type="text" data-bind="value: Name, uniqueName: true" class="required" /></td>
<td>
<a href="#" data-bind="click: function() { viewModel.removeContact1(this); }">Delete</a></td>
</tr>
</tbody>
</table>
<button data-bind="click: addContact1">Add Contact1</button>
</fieldset>
Sửa
VM1 qua VM10 đều giống nhau ngoại trừ logic xác nhận, vì vậy tôi phải làm cho họ các lớp học khác nhau (không may, vì nó TẤN của sự lặp lại trong các mô hình, và trong quan điểm).
Phía khách hàng - đây là những gì tôi hỏi về: Tôi cần phải chuyển từ mô hình ASP MVC chứa danh sách lồng nhau và để chúng được trình bày trên máy khách với loại bỏ (tôi thấy nó làm tốt nhất liên quan đến danh sách động). Tương tự như địa chỉ liên hệ gmail - bạn có điện thoại nhà/công việc/điện thoại di động/fax - vì vậy một danh sách là nhãn cho điện thoại (điện thoại nào) và nên được trình bày dưới dạng combobox, một danh sách khác là danh sách động của điện thoại có thể tăng theo số lần nhấp của người dùng.
End chỉnh sửa
Tôi không hiểu làm thế nào để tạo ra một ViewModel loại trực tiếp từ mô hình lồng nhau này, rõ ràng Tên nên là một phần của nó, nhưng phần còn lại là danh sách và họ cũng chứa danh sách.
Cách ánh xạ?
cách xử lý (một danh sách thả xuống sẽ là nhãn của danh sách khác có độ dài thay đổi - lý do duy nhất để sử dụng loại trực tiếp ở đây).?
sau khi điền, cách đặt tất cả lại với nhau và gửi lại cho hoạt động của bộ điều khiển?
cách viết mô hình trình chỉnh sửa khi nhãn là danh sách thả xuống (hoặc combobox) của nhãn cho tên (ví dụ: email [label] home/work [name], [label] mobile/home/car [name] điện thoại)
Nếu đó là lớp đơn giản với IList
bên trong - giống như here. Vấn đề là có danh sách bên trong các danh sách, Knockout yêu cầu mọi thứ đều có thể quan sát được, không chắc chắn làm thế nào để thể hiện trong kịch bản lệnh java mô hình lồng ghép này.
Vui lòng trợ giúp. Cảm ơn trước!
Xin chào, Chế độ xem mô tả của khách hàng của bạn ở đâu? có lẽ chúng ta có thể bắt đầu ở đó – amhed
Mỗi phần tử Danh sách có phải là một loại khác không? Tôi thấy bạn đã khai báo VM1, cũng sẽ có VM2, VM3, VM ... n làm khai báo lớp không? là những khác nhau hoặc bạn có thể tạo một loại danh sách lớp chung và chỉ có 10 trường hợp? – amhed
Xem chỉnh sửa. VM1 bằng nhau ngoại trừ chú thích dữ liệu (hoặc các quy tắc xác thực trong trường hợp xác thực thông thạo). Phía khách hàng là những gì tôi đang hỏi. Hai danh sách - một là combobox (công việc/nhà) cho người khác (điện thoại/email/địa chỉ/etc). Làm thế nào để thể hiện nó trong Knockout ... Cảm ơn –