Обновление нескольких элементов в одном представлении

Я пытаюсь сделать заявку на инвентаризацию, мой взгляд загружает все мои акции одним редактором. Мой контроллер не получает никаких данных из представления?

Я хочу иметь возможность редактировать все мои акции одновременно? Как я могу это сделать

Код модели

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

@using (Html.BeginForm())
{
@Html.ValidationSummary(true)


    ReStock




    
        Item Name
    
    
        Wanted Stock
    
    
        Stock On Hand
    
    

@foreach (var item in Model)
{

    
        @Html.DisplayFor(modelItem => item.Item_Name)
    
    
        @Html.DisplayFor(modelItem => item.Wanted_Stock)
    
    
    
        @Html.EditorFor(modelItem => item.Actual_Stock)
        @Html.ValidationMessageFor(modelItem => item.Actual_Stock)
    
    
    @Html.HiddenFor(modelItem => item.ID)
    
    }
    
    
    

}

Код контроллера

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

Ответы на вопрос(2)

ала прочитатьследующая статья чтобы понять, почему ваш код неправильно связать коллекцию. Как только вы поймете, что можете сделать следующее:

@model IEnumerable<flatsystem.models.stock>
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <div class="sidemenu">
        <div class="sidemenu-heading">
            ReStock
        </div>
        <div class="div-body">
            
                    @Html.EditorForModel()
                <input type="submit" value="Submit"><p>а теперь определите пользовательский шаблон редактора для<code>Stock</code> тип, который будет автоматически отображаться для каждого элемента коллекции (<code>~/Views/Shared/EditorTemplates/Stock.cshtml</code>) - имя и местоположение шаблона редактора важно, так как он работает по соглашению:</p><pre><code>@model FlatSystem.Models.Stock
</code></pre><code>
    @Html.HiddenFor(x => x.ID)
</code><p>Примечание: Вы также можете включить<code>Wanted_Stock</code> а также<code>Item_Name</code> как скрытые поля вместе с<code>ID</code> в шаблоне редактора, чтобы их значения были отправлены на сервер, потому что вы недля них не должно быть соответствующего поля ввода.</p><table>
                <thead>
                    <tr>
                        <th>Item Name</th>
                        <th>Wanted Stock</th>
                        <th>Stock On Hand</th>
                        <th></th>
                    </tr>
                </thead>
                <tbody></tbody>
        
    
    <tbody><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></tr>
</tbody></table>
}
</div></div></flatsystem.models.stock>
 amesh11 окт. 2012 г., 13:20
Хорошее объяснение. Спасибо
 Darin Dimitrov11 окт. 2012 г., 13:18
Это будет сделано автоматически, вы нене нужно ничего загружать. Он будет искать шаблон редактора внутри~/Views/Shared/EditorTemplates называетсяStock.cshtml потому что основная модель имеет тип.IEnumerable
 webdeveloper11 окт. 2012 г., 13:22
@amesh Одним из главных преимуществ этого метода является автоматическая генерация с одной строкой, раздельное хранение и повторное использование.
 amesh11 окт. 2012 г., 13:14
Это's Отлично .. Нужно ли нам вручную загружать шаблон редактора здесь? или @ Html.EditorForModel () сделает это сам?
Решение Вопроса

Сложно ответить на ваш вопрос без класса модели, но идея в том, что ваше редактированиеinputs должен содержать индекс в.name attribute

Что-то вроде этого:

@for(int i = 0: i < Model.Count(); i++)
{
    
    
        @Html.DisplayFor(modelItem => Model[i].Item_Name)
    
    
        @Html.DisplayFor(modelItem => Model[i].Wanted_Stock)
    
    
    <div class="editor-field">
        @Html.EditorFor(modelItem => Model[i].Actual_Stock)
        @Html.ValidationMessageFor(modelItem => Model[i].Actual_Stock)
    </div>
    
    @Html.HiddenFor(modelItem => Model[i].ID)
    
}

Добавлено:

Извините, спасибоДарин димитров, вы можете'т доступIEnumerable по индексу, используйтеList или же .Array

 amesh11 окт. 2012 г., 12:50
Это должно быть @Foreach
 webdeveloper11 окт. 2012 г., 13:18
@Panther Это нормально, потому что вы отправляете только редактируемые входные данные на сервер, как решение дляDisplayFor можете добавитьHiddenFor для этого свойства.
 Darin Dimitrov11 окт. 2012 г., 13:03
@Panther,это привело к краху моей программы довольно паршивое описание проблемы. Вы могли бы быть немного более явным. Может быть, вы получили сообщение об ошибке или что-то, что вы могли бы поделиться с нами. В любом случае, убедитесь, что вы передаетеIList экземпляр этого представления внутри действия контроллера. Вы могли бы использовать.ToList() метод расширения на вашей модели:.return View(model.ToList());
 amesh11 окт. 2012 г., 13:05
@ Darin Да. О редакторе шаблонов. Спасибо
 Panther11 окт. 2012 г., 13:29
Спасибо за потраченное время, Вы все очень помогли, и моя проблема решена.
 Darin Dimitrov11 окт. 2012 г., 13:11
 amesh11 окт. 2012 г., 13:03
@Darin Не могли бы вы указать несколько полезных ссылок
 Darin Dimitrov11 окт. 2012 г., 13:04
@amesh, ссылки о чем? Редактор шаблонов? Я опубликую ответ здесь, чтобы проиллюстрировать.
 amesh11 окт. 2012 г., 12:54
Я был неправ. Для простого рендеринга HTML я использовал @foreach. Спасибо +1
 Darin Dimitrov11 окт. 2012 г., 12:41
Его модель имеет типIEnumerable, вы не можете получить к нему доступ по индексу. Вы должны обновить свой ответ, принимая во внимание, что для того, чтобы ваше решение работало, ему необходимо изменить тип своей модели.
 Panther11 окт. 2012 г., 13:19
Есть ли способ сделать их EditorFor, но отключить ввод ???
 Darin Dimitrov11 окт. 2012 г., 13:02
@amesh, да, вы можете использовать шаблоны редактора.
 Panther11 окт. 2012 г., 13:12
У меня есть весь список, и установить тип моей модели на Ilist. Это'Теперь обновляет Wanted_Stock нормально, но оставляя остальные данные в моих таблицах.
 webdeveloper11 окт. 2012 г., 13:32
@Panther Вы можете использовать это:@Html.TextBoxFor(x = x.Prop, new { disabled = "disabled" })
 Panther11 окт. 2012 г., 12:59
Я попробую'изменил тип моей модели на IList. Но это потому чтос моей программой вылетать
 amesh11 окт. 2012 г., 12:59
Есть ли обходной путь для коллекций типа IEnumerable, кроме доступа на основе индекса?
 Darin Dimitrov11 окт. 2012 г., 12:51
Нет,оно может'т быть foreach, Пожалуйста, прочитайте следующую статью, чтобы понять, почему:haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx.

Ваш ответ на вопрос