2013-05-22 3 views
1

Я разрабатываю 3 приложений ASP .Net MVC с помощью C# и SQL Server 2005.Как сохранить значения в списке в ASP MVC 3

Я использую также Entity Framework и код первого метода.

У меня есть форма в частичном виде, который соответствует коде:

<%@ Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication2.Models.FlowViewModel>" %> 
<% using (Html.BeginForm("Save", "ProfileGa")) { %> 
    <%: Html.ValidationSummary(true) %> 
    <fieldset class="parametrage"> 
     <legend>Gestion de Gamme</legend> 

     <div> 
     <%:Html.Label("Poste :")%><%: Html.DropDownListFor(model => model.SelectedPoste, Model.PostesItems)%> 

     </div> 
     <div> 
     <%:Html.Label("Nombre de Passage :")%><%: Html.EditorFor(model=>model.Nbr_Passage)%> 
     </div> 
     <div class="editor-field"> 
      <%: Html.ValidationMessageFor(model => model.Nbr_Passage)%> 
      </div> 

     <div> 
     <%:Html.Label("Position :")%><%: Html.EditorFor(model=>model.Position)%> 
     </div> 


     <div> 
     <%:Html.Label("Poste Suivant :")%><%: Html.DropDownListFor(model => model.PosteSuivantSelected, Model.PostesItems, new { @id = "dd" })%> 

     </div> 


     <div> 
     <input type="submit" value="Enregistrer" id="btnSave" /> 
     </div> 

     </fieldset> 

и это, как он выглядит: pic Я хочу, чтобы сохранить значения entred в списке. Таким образом, я создал список в моей модели представления, как это:

public List<Gamme> ListG = new List<Gamme>(); 

Тогда в моем «ProfileGaController» контроллера, я определил метод сохранения для сохранения в списке:

[HttpPost] 
    public ActionResult Save(FlowViewModel model) 
    { 

     if (ModelState.IsValid) 
     { 
      Gamme G = new Gamme(); 
      G.ID_Gamme = model.SelectedProfile_Ga; 
      G.ID_Poste = model.SelectedPoste; 

      G.Next_Posts = model.PosteSuivantSelected; 
      G.Nbr_Passage = int.Parse(model.Nbr_Passage); 
      G.Position = int.Parse(model.Position); 
      model.ListG.Add(G); 
     } 
     return RedirectToAction("Index");  
    } 

Проблема:

Каждый раз, когда я сохраняю в списке, значения th удаляются и заменяются новыми.

Всегда, у меня есть счетчик = 1 для списка:

pp

ответ

1

Я не уверен, зачем вам этот список вообще. Model существует только на время действия этого контроллера, и вы не передаете его в представление. В вашем коде вы делаете новый Gamme, добавляете его в список и затем бросаете все это. Если вы просто пытаетесь сохранить новый Gamme в базе данных, она не работает, если вы

db.Gammes.Add(G); 
db.SaveChanges(); 

вместо

model.ListG.Add(G); 

Какова цель списка?

Edited после дальнейшего уточнения:

Похоже, вы хотите временный список Gamme элементов, добавленных в одной сессии, так что вы можете использовать переменный сеанс для хранения списка Gammes вы добавили в то время. Инициализировать в контроллере и добавить в экономии действия так:

((List<Gamme>)System.Web.HttpContext.Current.Session["GammeList"]).Add(G); 

Тогда, если вы хотите, чтобы присвоить его параметру View Model это как:

model.ListG = (List<Gamme>)System.Web.HttpContext.Current.Session["GammeList"]; 

Я, лично пошел бы назад и инженер это немного по-другому. Я бы поставил bool на Gamme под названием «обработанный» или что-то подобное, и когда вы их создадите, установите его на false.Таким образом, вместо использования списка переменных сеанса вы можете получить тот же список, выбрав все объекты Gamme, где обрабатывается false.

+0

спасибо за ответ, это был мой первый подход: сохранить непосредственно в базу, и я сделал это с успехом, но теперь они рекомендуют мне сначала сохранить в списке, потому что мне нужно выполнить некоторые тесты перед записью – anouar

+0

Что вам нужно проверить? Просто новый Gamme, или список всех Gammes, включая новый. –

+0

Список новых Gammes, но каждый зависит от остальных – anouar

1

Вы всегда будете иметь 1 в списке, потому что вы создаете новый экземпляр ListG с новым List(); Поэтому, когда это будет передано обратно контроллеру, оно будет обновлено, и вы добавите новый объект G, в результате чего получится счет 1. В качестве альтернативы вы можете попробовать следующее: (при условии, что ваш экземпляр db локально доступен)

[HttpPost] 
public ActionResult Save(FlowViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     Gamme G = new Gamme(); 
     G.ID_Gamme = model.SelectedProfile_Ga; 
     G.ID_Poste = model.SelectedPoste; 

     G.Next_Posts = model.PosteSuivantSelected; 
     G.Nbr_Passage = int.Parse(model.Nbr_Passage); 
     G.Position = int.Parse(model.Position); 
     model.ListG = db.Gammes.ToList(); 
     model.ListG.Add(G); 
     db.SaveChanges(); 
    } 
    return RedirectToAction("Index"); 
} 
+0

Спасибо за ответ, но результат тот же мой друг! – anouar

+0

Сколько Gammes в настоящее время сохраняется в БД? Кроме того, вы пытались изменить свою собственность на своей модели представления, чтобы использовать обычный getter и setter: public List ListG {get; задавать; } – ianaldo21

+0

Я попробовал ,,, это будет Null исключение и о том, сколько Gammes, я не знаю, если мой ответ прав, но счет ListG стал 6 – anouar