1

我正在使用 C# 和 SQL Server 2005 开发一个 ASP .Net MVC 3 应用程序。

我也在使用实体框架和代码优先方法。

我在部分视图中有一个表单,代码是:

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

这就是它的外观: 图片 我想保存输入到列表中的值。所以我在我的视图模型中创建了一个列表,如下所示:

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

然后在我的控制器“ProfileGaController”中,我定义了一个方法 save 以保存在列表中:

[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 值都会被删除并替换为新值。

总是,我有 count=1 的列表:

pp

4

2 回答 2

1

我不确定你为什么需要这个列表。仅在Model此控制器操作期间存在,并且您不会将其传递给视图。在您的代码中,您正在创建一个 new Gamme,将其添加到列表中,然后将整个东西扔掉。如果你只是想Gamme在数据库中保存一个新的,如果你这样做它不起作用

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

代替

model.ListG.Add(G);

清单的目的是什么?

进一步澄清后编辑:

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

((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处理为假的对象来获得相同的列表,而不是使用会话变量列表。

于 2013-05-23T08:35:08.207 回答
1

您将始终在列表中有 1,因为您正在使用 new List(); 创建 ListG 的新实例;因此,当这被传递回控制器时,它将被更新,您将添加新的 G 对象,导致计数为 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 = db.Gammes.ToList();
        model.ListG.Add(G);
        db.SaveChanges();
    }
    return RedirectToAction("Index");
}
于 2013-05-22T21:25:41.027 回答