C# 如何在ASP MVC 3中保存列表中的值

C# 如何在ASP MVC 3中保存列表中的值,c#,visual-studio-2010,asp.net-mvc-3,entity-framework,C#,Visual Studio 2010,Asp.net Mvc 3,Entity Framework,我正在使用C#和SQLServer2005开发一个ASP.NETMVC3应用程序 我还使用实体框架和代码优先方法 我在局部视图中有一个表单,其代码为: <%@ Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication2.Models.FlowViewModel>" %> <% using (Html.BeginForm("Save", "ProfileGa")) { %>

我正在使用C#和SQLServer2005开发一个ASP.NETMVC3应用程序

我还使用实体框架和代码优先方法

我在局部视图中有一个表单,其代码为:

<%@  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>
问题:

每次我在列表中保存时,th值都会被删除并替换为新值

对于列表,我始终使用count=1:

[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");    
    }

列表中始终有1个,因为您正在使用new list()创建ListG的新实例;因此,当这被传递回控制器时,它将被更新,并且您将添加新的G对象,从而导致计数为1。或者,您可以尝试这样做:(假设您的db实例可以在本地访问)


我不知道你为什么需要这份清单。
模型
仅在此控制器操作期间存在,您不会将其传递给视图。在您的代码中,您正在创建一个新的
Gamme
,将其添加到列表中,然后将整个内容扔掉。如果您只是想在数据库中保存一个新的
Gamme
,那么如果您这样做了,它是否不起作用

db.Gammes.Add(G);
db.SaveChanges();
而不是

model.ListG.Add(G);
这份名单的目的是什么

进一步澄清后编辑:

似乎您希望在一个会话中添加一个临时的
Gamme
项目列表,因此您可以使用会话变量来存储您当时添加的Gamme列表。在控制器中初始化并添加保存操作,如下所示:

((List<Gamme>)System.Web.HttpContext.Current.Session["GammeList"]).Add(G);
((List)System.Web.HttpContext.Current.Session[“GammeList”])。添加(G);
然后,如果要将其指定给视图模型的参数,则如下所示:

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

一、 就我个人而言,我会回去做一些稍微不同的设计。我会在
Gamme
上放置一个
bool
,称为“已处理”或类似的东西,当您创建它们时,将其设置为
false
。这样,您可以通过选择处理为false的所有
Gamme
对象来获得相同的列表,而不是使用会话变量列表

谢谢你的回答,但结果是一样的,我的朋友!数据库中当前保留了多少个Gammes?另外,您是否尝试过将视图模型上的属性更改为使用普通的getter和setter:public List ListG{get;set;}我尝试过,,,这将是Null异常,大约有多少个Gammes,我不知道我的答案是否正确,但ListG的计数变成了6个答案的hanks,这是我的第一个方法:直接保存在基中,我成功地保存了,但现在他们建议我先保存在列表中,因为我需要在记录之前做一些测试操作。你需要测试什么?只有新的Gamme,或包括新Gamme在内的所有Gamme的列表。新Gamme的列表,但每个都取决于其他Gamme。但是,您一次只创建一个新Gamme,列表的其余部分来自何处?开始时列表为空,然后每次单击,我添加新Gamme。最后,我测试了它们之间的依赖关系,如果可以的话,我会将所有列表记录在数据库中。
((List<Gamme>)System.Web.HttpContext.Current.Session["GammeList"]).Add(G);
model.ListG = (List<Gamme>)System.Web.HttpContext.Current.Session["GammeList"];