Asp.net mvc 3 更新同一视图中的多个项目

Asp.net mvc 3 更新同一视图中的多个项目,asp.net-mvc-3,Asp.net Mvc 3,我正在尝试制作一个盘点应用程序,我的视图用一个编辑器加载我所有的库存。 我的控制器没有从视图中获取任何数据 我希望能够同时编辑我的所有股票? 我该怎么做 模型代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace FlatSystem.Models { public class Stock { public int ID { get; set; }

我正在尝试制作一个盘点应用程序,我的视图用一个编辑器加载我所有的库存。 我的控制器没有从视图中获取任何数据

我希望能够同时编辑我的所有股票? 我该怎么做

模型代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace FlatSystem.Models
{
public class Stock
{
    public int ID { get; set; }
    public string Item_Name { get; set; }
    public int Actual_Stock { get; set; }
    public int Wanted_Stock { get; set; }


}
}
视图代码

@model IEnumerable<FlatSystem.Models.Stock>

@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div class="sidemenu">
<div class="sidemenu-heading">
    ReStock
</div>
<div class="div-body">
<table>
<tr>
    <th>
        Item Name
    </th>
    <th>
        Wanted Stock
    </th>
    <th>
        Stock On Hand
    </th>
    <th></th>
</tr>
@foreach (var item in Model)
{
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Item_Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Wanted_Stock)
    </td>
    <td>
    <div class="editor-field">
        @Html.EditorFor(modelItem => item.Actual_Stock)
        @Html.ValidationMessageFor(modelItem => item.Actual_Stock)
    </div>
    </td>
    @Html.HiddenFor(modelItem => item.ID)
    </tr>
    }
    </table>
    </div>
    </div>
<input type="submit" value="Submit" />
}
@model IEnumerable
@使用(Html.BeginForm())
{
@Html.ValidationSummary(true)
重新进货
项目名称
通缉犯
库存
@foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.item\u名称)
@DisplayFor(modelItem=>item.Wanted\u库存)
@EditorFor(modelItem=>item.Actual\U库存)
@Html.ValidationMessageFor(modelItem=>item.Actual\U库存)
@Html.HiddenFor(modeleItem=>item.ID)
}
}
控制器代码

        [HttpPost]
    public ActionResult ReStock(List<Stock> stock)
    {
        foreach (var item in stock)
        {
            if (ModelState.IsValid)
            {
                GR.InsertOrUpdate(item);
            }
        }
        GR.Save();
        return RedirectToAction("Restock");
    }
[HttpPost]
公共行动结果重新进货(列出库存)
{
foreach(库存var项目)
{
if(ModelState.IsValid)
{
GR.InsertOrUpdate(项目);
}
}
GR.Save();
返回操作(“重新进货”);
}

没有模型类很难回答您的问题,但想法是您的编辑
输入必须在
名称属性中包含索引

大概是这样的:

@for(int i = 0: i < Model.Count(); i++)
{
    <tr>
    <td>
        @Html.DisplayFor(modelItem => Model[i].Item_Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => Model[i].Wanted_Stock)
    </td>
    <td>
    <div class="editor-field">
        @Html.EditorFor(modelItem => Model[i].Actual_Stock)
        @Html.ValidationMessageFor(modelItem => Model[i].Actual_Stock)
    </div>
    </td>
    @Html.HiddenFor(modelItem => Model[i].ID)
    </tr>
}
for(int i=0:iModel[i].Item\u名称) @DisplayFor(modelItem=>Model[i]。通缉犯库存) @EditorFor(modeleItem=>Model[i].实际库存) @Html.ValidationMessageFor(modelItem=>Model[i]。实际库存) @Html.HiddenFor(modeleItem=>Model[i].ID) }
添加:


很抱歉,多亏了达林·迪米特罗夫(Darin Dimitrov),您无法按索引访问
IEnumerable
,使用
List
Array
,您可以使用编辑器模板。我建议您首先阅读,以便理解代码没有正确绑定集合的原因。一旦您了解到您可以执行以下操作:

@model IEnumerable<FlatSystem.Models.Stock>
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <div class="sidemenu">
        <div class="sidemenu-heading">
            ReStock
        </div>
        <div class="div-body">
            <table>
                <thead>
                    <tr>
                        <th>Item Name</th>
                        <th>Wanted Stock</th>
                        <th>Stock On Hand</th>
                        <th></th>
                    </tr>
                </thead>
                <tbody>
                    @Html.EditorForModel()
                </tbody>
        </div>
    </div>
    <input type="submit" value="Submit" />
}

备注:您可能还希望将
通缉库存
商品名
以及
ID
作为隐藏字段包含在编辑器模板中,以便将其值发送到服务器,因为您没有相应的输入字段。

他的模型类型为
IEnumerable
,您不能通过索引访问它。你应该更新你的答案,考虑到为了使你的解决方案有效,他需要更改他的模型类型。不,不能是
foreach
。请阅读以下文章以了解原因:。我错了。对于html的简单呈现,我使用了@foreach。感谢+1除了基于索引的访问之外,对于IEnumerable类型的集合还有其他解决方法吗?我尝试将模型类型更改为IList。但这是因为我的节目是crashIt的好节目。。我们需要在这里手动加载编辑器模板吗?或者@Html.EditorForModel()将自己完成?它将自动完成,您不需要加载任何内容。它将在
~/Views/Shared/EditorTemplates
中寻找一个名为
Stock.cshtml
的编辑器模板,因为主模型是
IEnumerable
@amesh类型,这种技术的最大优点之一是自动生成一行,单独存储和可重用。
@model FlatSystem.Models.Stock
<tr>
    <td>
        @Html.DisplayFor(x => x.Item_Name)
    </td>
    <td>
        @Html.DisplayFor(x => x.Wanted_Stock)
    </td>
    <td>
    <div class="editor-field">
        @Html.EditorFor(x => x.Actual_Stock)
        @Html.ValidationMessageFor(x => x.Actual_Stock)
    </div>
    </td>
    @Html.HiddenFor(x => x.ID)
</tr>