将数据从视图传递到模型中的模型

时间:2019-10-12 21:26:23

标签: c# asp.net asp.net-mvc

我正在从视图中读取数据。我需要通过模型将数据传递给控制器​​。但是问题是我需要将数据传递给模型中的模型。

我尝试过这个

@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"})
}

但这是不正确的

这是我的视图代码

@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。有可能吗?还是最好在基本模型中有一个List并在那里阅读?

2 个答案:

答案 0 :(得分:0)

您的控制器和视图模型对我来说很好。这就是我的看法。首先在Views文件夹内添加一个文件夹“ EditorTemplates”。然后在该文件夹中创建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)
    ...
}

答案 1 :(得分:0)

请在视图中更改以下代码

  

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"})
        }
    }