ASP.Net MVC4 привязывает «создание представления» к модели, содержащей список
Здравствуйте, в интернете, у меня есть интересная головоломка для вас:
Можно ли связать представление для создания объекта, если этот объект содержит список других объектов, использующих только представления MVC / частичные представления?
Чувак, все вышло так сложно, как ... позвольте мне привести пример кода, который я имею в виду:
Models:
public class ComplexObject
{
public string title { get; set; }
public List contents { get; set; }
}
public class ContainedObject
{
public string name { get; set; }
public string data { get; set; }
}
Красиво и просто верно? Итак, строго типизированное представление для создания одного из них действительно просто длязаглавие" имущество:
something like:
@Html.TextBoxFor(x => x.title)
Но я могу'не могу найти хороший способ связать списокContainedObjects» используя MVC. Самым близким, что я получил, было создание строго типизированного IEnumerable частичного представления с "Список" Шаблон скаффолд и включить его на странице.
Без добавления стилей и т. Д. По умолчанию это частичное представление выглядит так:
@model IEnumerable
<p>
@Html.ActionLink("Create New", "Create")
</p>
@Html.DisplayNameFor(model => model.name)
@Html.DisplayNameFor(model => model.data)
@foreach (var item in Model) {
@Html.DisplayFor(modelItem => item.name)
@Html.DisplayFor(modelItem => item.data)
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
}
Но, честно говоря, я могуt выяснить, как включить это как привязку к созданию нового ComplexObject. Другими словами, я могу показать список уже существующих объектов ContainedObject, связавшись так: @ Html.Partial ("PartialCreate», Model.contents)
Но то, что я действительно хочу, я думаю, это что-то вроде:
@Html.PartialFor("PartialCreate", x => x.contents)
Я должен отметить, что я неу меня не так уж много проблем с кодированием вокруг этого с помощью Javascript (явключу код ниже) но яочень хотел бы знать, если естьЭто способ сделать это исключительно с MVC. Я'м недавно конвертировать из WebForms (где яВо всяком случае, я просто заменил все мои постбэки вызовами AJAX), и подобные вещи часто встречаются в проектах, над которыми я работаю.
Во всяком случае, здесьКак я сейчас это делаю:
HTML -
Name:
Data:
<a id="addItem">Add Item</a>
<a id="saveAll">Save Complex Object</a>
Javascript -
var contents = [];
$(document).ready(function () {
$('#addItem').click(function () {
var newItem = { name: $('#enterName').val(), data: $('#enterData').val() };
contents.push(newItem);
$('#addedItems').html('');
for (var i = 0; i < contents.length; i++) {
$('#addedItems').append(
"" + contents[i].name + ", " + contents[i].data + ""
);
}
});
$('#saveAll').click(function () {
var toPost = { title: "someTitle", contents: contents };
$.ajax({
url: '/Home/SaveNew',
type: 'POST',
data: JSON.stringify(toPost),
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data, textStatus, jqXHR) {
alert("win");
},
error: function (objAJAXRequest, strError) {
alert("fail");
}
});
});
});
И этоне страшное решение или что-то, я просто неЯ не хочу реализовывать вызовы Javascript каждый раз, когда я хочу сохранить новый объект, но везде использую стандартный код Razr. Я'Я хотел бы быть достаточно последовательным по всем направлениям.
Кто-нибудь еще сталкивался с этой проблемой и нашел решение?