Я новичок в MVC, и я пытаюсь выяснить, как связать динамический список.Список динамической модели не привязан к сообщению
Я выполнил инструкции из этого example и других примеров, чтобы создать таблицу. Новые элементы успешно добавлены в таблицу. Тем не менее, при отправке назад только элемент по умолчанию, который был добавлен в список изначально, доступен, ни один из новых.
Это мои модели:
public class ItemModel {
public int ID { get; set; }
[Display(Name = "Name")]
public string Name { get; set; }
[Display(Name = "Description")]
public string Description { get; set; }
}
public class MainModel{
public List<ItemModel> Items { get; set; }
public MainModel(){
Items = new List<ItemModel>()
}
}
Мое мнение:
<table id="list">
<thead>
<tr>
<th style="width: 150px;">
@Html.DisplayNameFor(model => model.Items[0].Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Items[0].Description)
</th>
<th>
Delete
</th>
</tr>
</thead>
<tbody>
@Html.Partial("Item", Model)
</tbody>
</table>
Частичный вид:
@for (var i = 0; i < Model.Items.Count; i++) {
<tr>
<td>
@Html.TextBoxFor(model => model.Items[i].Name)
</td>
<td>
@Html.TextBoxFor(model => model.Items[i].Description)
</td>
<td>
<button class="btn" type="button" data-id="@Model.Items[i].ID" value="Delete"/>
</td>
</tr>
}
Я использую Ajax сообщение для добавления новых элементов в таблице:
$('.add').click(function() {
var action = "/Project/Add";
$.ajax({
url: action,
cache: false,
success: function (result) {
$("#list").find("tbody").empty().append($(result));
}
});
});
Действие
Контроллер:
public ActionResult Add() {
ItemModel item = new ItemModel();
try {
item.ID = ((MainModel)Session["MainModel"]).Items.LastOrDefault().ID + 1;
((MainModel)Session["MainModel"]).Items.Add(item);
} catch (Exception) {
return Json(null);
}
return PartialView("Item", Session["MainModel"]);
}
Может кто-то пожалуйста, скажите мне, что я делаю неправильно?
Спасибо.
Каков ваш метод проводка? И поскольку ваш метод 'Add()' возвращает всю таблицу снова, вы не получаете большую пользу от использования ajax. [Этот ответ] (http://stackoverflow.com/questions/28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308#28081308) показывает некоторые варианты, которые следует учитывать для повышения производительности (и избавиться от ненужного использования 'Session') –
Где находится метод действия контроллера, который выполняется при обратной передаче? –
Я не вижу, что вы используете привязку в методе действий Add() !, и я не вижу, что вы отправляете данные в свой вызов ajax! Не уверен, что я что-то упустил, но я не понимаю, как будет работать ваш код. Я предлагаю вам проверить другие примеры в сети. –