Передача данных из вида в модель в модели - PullRequest
0 голосов
/ 13 октября 2019

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

Я пробовал это

@foreach (var item in Model.Items)
{
    @Html.TextBoxFor(item.ItemCount, null, new { @class="input_quantity- 
    value", value = "2.5", data_type="area", data_width="2.5"})
}

, но это неверно

Вот мой код дляview

@model TechnoTent.Models.ViewModel.OrderVM

@using (Html.BeginForm("EditOrder", "AdminOrder", FormMethod.Post, new { 
@class = "product-edit", enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    @foreach (var item in Model.Items)
    {
        @Html.TextBoxFor(item.ItemCount, null, new { 
        @class="input_quantity-value", value = "2.5", data_type="area", data_width="2.5"})
    }
}

Вот код для контроллера

[HttpPost]
public ActionResult EditOrder(OrderVM order)
{
    AdminOrders.EditOrder(order);

    return View();
 }

и вот часть кода для моей модели

 public class OrderVM
 {
     public List<OrderItemsVM> Items { get; set; }
 }

, а вот часть кода для моего OrderItemsVMмодель

 public class OrderItemsVM
 {
      public string ItemCount { get; set; }
 }

Мне нужно прочитать ItemCount с точки зрения моего OrderItemsVm. Возможно ли это как-то? или лучше иметь список в базовой модели и читать его там?

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Пожалуйста, измените приведенный ниже код в представлениях

cshtml-страницу

    @model TechnoTent.Models.ViewModel.OrderVM

    @using (Html.BeginForm("EditOrder", "AdminOrder", FormMethod.Post, new { 
    @class = "product-edit", enctype = "multipart/form-data" }))
    {
        @Html.AntiForgeryToken()        
        for(int i=0; i < Model.Items.Count;i++)
        {
@Html.TextBox("Items["+i+"].ItemCount", "2.5", new { 
            @class="input_quantity-value", value = "2.5", data_type="area", data_width="2.5"})
        }
    }

cshtml-страницу, если вы хотите установить значения модели в контроллере, как вы редактируетеданные

    @model TechnoTent.Models.ViewModel.OrderVM

    @using (Html.BeginForm("EditOrder", "AdminOrder", FormMethod.Post, new { 
    @class = "product-edit", enctype = "multipart/form-data" }))
    {
        @Html.AntiForgeryToken()        
        for(int i=0; i < Model.Items.Count;i++)
        {
@Html.TextBox("Items["+i+"].ItemCount",Model.Items[i].ItemCount , new { 
            @class="input_quantity-value", value = "2.5", data_type="area", data_width="2.5"})
        }
    }
0 голосов
/ 13 октября 2019

Ваш контроллер и модели просмотра выглядят хорошо для меня. Вот как бы я делал взгляды. Сначала добавьте папку «EditorTemplates» внутри папки Views. Затем создайте представление OrderItemsVM.cshtml внутри этой папки.

/ EditorTemplates / OrderItemsVM.cshtml:

@model TechnoTent.Models.ViewModel.OrderItemsVM

<div>
    @Html.TextBoxFor(model => model.ItemCount, new { @class = "..." })
</div>

На странице формы избавьтесь от @foreach (...) {.. .} заблокировать и заменить его на @ Html.EditorFor (model => model.Items)

YourFormPage.cshtml:

@model TechnoTent.Models.ViewModel.OrderVM

@using (Html.BeginForm(...))
{
    @Html.AntiForgeryToken()

    @Html.EditorFor(model => model.Items)
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...