我正在从视图中读取数据。我需要通过模型将数据传递给控制器。但是问题是我需要将数据传递给模型中的模型。
我尝试过这个
@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并在那里阅读?
答案 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"})
}
}