Я делаю некоторые вычисления на стороне сервера и отображаю таблицу в виде. Я хочу иметь возможность редактировать каждую строку таблицы в одном представлении.
Как связать модель с представлением, чтобы после редактирования в представлении я получил список объектов модели в действии контроллера POST?
Моя модель:
public class Item
{
public float floatValue1;
public string stringValue1;
public float floatValue2;
public double doubleValue1;
}
Из этой модели я создал табличное представление, в котором перечислены значения в таблице HTML.
Однако в режиме редактирования мне не нужно редактировать каждое поле . Например, только floatValue1
, stringValue1
, floatValue2
должны быть доступны для редактирования. doubleValue1
должно оставаться текущим значением и не редактироваться пользователем.
Я попробовал предложения, которые я нашел в Интернете:
Мой контроллер отправляет список Item
объектов в окно редактирования в виде IList<Item>
Представление редактирования имеет HTML-форму с циклом for
, каждая итерация создает строку таблицы с Html.EditorFor
public ActionResult PricingEdit(int? i)
{
var result = calculations(); // returns IList<Item>
return View(result.ToList());
}
Мой вид редактирования:
@model IList<Item>
@{
ViewBag.Title = "Edit sheet";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("EditItems", "Controller", FormMethod.Post))
{
<table class="table table-sm">
<tr>
<th>
floatValue1
</th>
<th>
stringValue1
</th>
<th>
floatValue2
</th>
</tr>
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@for(int i= 0; i < Model.Count(); i++)
{
<tr>
<td>
@Html.EditorFor(x => x[i].floatValue1)
</td>
<td>
@Html.EditorFor(x => x[i].stringValue1)
</td>
<td>
@Html.EditorFor(x => x[i].floatValue2)
</td>
<td>
@Html.EditorFor(x => x[i].doubleValue1, new { @readonly = "readonly" })
</td>
</tr>
}
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-secondary btn-lg mt-1" />
</div>
</div>
}
Действие контроллера HTTP POST:
public ActionResult EditItems(IList<Item> table)
{
return View(new List<Item>());
}
Я получаю List<Item>
значений в своем действии, но каждый элемент в списке имеет 0 или нулевые значения для полей.