3

株式取得アプリケーションを作成しようとしています。私のビューは、すべての株式を 1 つのエディターで読み込みます。コントローラーがビューからデータを取得していませんか?

すべての在庫を同時に編集できるようにしたいですか? これどうやってするの

型式コード

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

コントローラーコード

        [HttpPost]
    public ActionResult ReStock(List<Stock> stock)
    {
        foreach (var item in stock)
        {
            if (ModelState.IsValid)
            {
                GR.InsertOrUpdate(item);
            }
        }
        GR.Save();
        return RedirectToAction("Restock");
    }
4

2 に答える 2

4

モデルクラスなしで質問に答えるのは難しいですが、編集inputsには にインデックスが含まれている必要がありますname attribute

このようなもの:

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

追加した:

申し訳ありませんが、 Darin DimitrovのおかげでIEnumerable、インデックス、使用ListまたはでアクセスすることはできませんArray

于 2012-10-11T10:37:58.710 に答える
3

エディター テンプレートを使用できます。コードがコレクションを正しくバインドしない理由を理解するために、まず次の記事を読むことをお勧めします。次のことができることを理解したら、次のことができます。

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

Stock次に、コレクション ( ) の各要素に対して自動的にレンダリングされる型のカスタム エディター テンプレートを定義します~/Views/Shared/EditorTemplates/Stock.cshtml。規則に従って機能するため、エディター テンプレートの名前と場所は重要です。

@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>

備考:対応する入力フィールドがないため、値をサーバーに送信するために、エディタ テンプレートにWanted_StockItem_Nameを非表示フィールドとして含めることもできます。ID

于 2012-10-11T11:09:06.567 に答える