2

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

在一个视图中,我有一个“Enregistrer”按钮,我在其中添加了一个 JQuery 脚本。

该脚本用于删除从 DropDownList 'Poste' 中选择的项目。

此按钮的目的是将一些值保存在名为“ListG”的列表中。

按钮工作完美的问题,但是当我添加脚本时,情况发生变化,按钮不起作用并变成静态(死)。

我的问题场景:

  1. 用户在“下拉列表”帖子中选择了一些东西
  2. 用户填写表格
  3. 用户点击注册器
  4. javascript从poste中删除选定的项目
  5. 表单提交给动作

  6. 行动做某事

  7. 动作返回一个包含大量数据的视图
  8. 视图被渲染,所有选项再次出现在 poste

问题是我必须在操作中删除该项目。

准确地说:

我有 2 个集合:PostesItems 和 ListG 我必须从 PostesItems 中删除已经在 ListG 上的帖子。

这是视图中的代码:

<%@  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, new { @id = "poste" })%>



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

    <script type="text/javascript">

        $(function () {
            $('#btnSave').click(function () {
                $('#poste option:selected').remove();

            });
        });

    </script>

这是模型的代码:

public class FlowViewModel
    {

        [Key]
        public string IDv { get; set; }
        [NotMapped]
        public SelectList PostesItems { get; set; }

        public List<Gamme> GaItems { get; set; }

        public string SelectedPoste { get; set; }

        public string PostePrecedentSelected { get; set; } 
        public string PosteSuivantSelected { get; set; }
        public string Position { get; set; }
        public string  Nbr_Passage { get; set; }

         [NotMapped]
        public List<Gamme> ListG {get;set;}


    }

最后是控制器中的代码:

[HttpGet]
        public ActionResult Index()
       {   
            var viewModel = new FlowViewModel();
            viewModel.PostesItems = new SelectList(db.Postes.ToList(), "ID_Poste", "ID_Poste");
            viewModel.Profile_GaItems = db.Profil_Gas.ToList();
            viewModel.GaItems = db.Gammes.ToList();
            viewModel.ListG = (List<Gamme>)System.Web.HttpContext.Current.Session["GammeList"];

            return View(viewModel);

        }

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

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


            }
            return RedirectToAction("Index");
                   }

我尝试的解决方案:

我将此行添加到控制器中的方法索引中:

viewModel.PostesItems.Where(x => !viewModel.ListG.Contains(x)).ToList();

但是编译有错误!

4

1 回答 1

1

您正在对完全不同的对象使用 linq

PostesItems is of type 'SelectList'
and ListG is of type List<Gamme>

您将如何在 linq 查询中将它们等同起来。

相反,你应该使用这样的东西

foreach(var postItem in viewModel.PostesItems){
   viewModel.ListG.ForEach((x)=>{
        if((x.PostId != postItem.Text) || (x.PostId != postItem.Value)){
           // Your logic goes here...
        }
   });
}

在出现错误的行中提供有关您想要完成的任务的更多详细信息。您正在尝试检查对象列表是否包含选择列表项。

于 2013-05-28T04:57:24.417 回答