Как создать представление редактирования для нескольких объектов модели без первичного ключа? - PullRequest
0 голосов
/ 04 июня 2019

Я делаю некоторые вычисления на стороне сервера и отображаю таблицу в виде. Я хочу иметь возможность редактировать каждую строку таблицы в одном представлении.

Как связать модель с представлением, чтобы после редактирования в представлении я получил список объектов модели в действии контроллера 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 или нулевые значения для полей.

1 Ответ

1 голос
/ 04 июня 2019

Ваша модель должна иметь геттеры и сеттеры, чтобы связыватель модели мог устанавливать значения. Должно работать, когда ваша модель соответствует следующему:

public float floatValue1 { get; set; }
public string stringValue1 { get; set; }
public float floatValue2 { get; set; }
public double doubleValue1 { get; set; }

В C # обычно свойства начинаются с заглавной буквы, поэтому я советую вам изменить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...