用于在ASP MVC中同时发布Action和Script的按钮

时间:2013-05-25 11:04:59

标签: c# javascript jquery visual-studio-2010 asp.net-mvc-3

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

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

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

此按钮用于在名为“ListG”的列表中保存一些值。

按钮完美运行的问题,但是当我添加脚本时,情况发生变化,按钮不起作用,变得静止(死机)。

我的问题情景:

  1. 用户在“下拉列表”中选择一些内容 邮政
  2. 用户填写表单
  3. 用户点击enregistrer
  4. javascript从poste中删除所选项目
  5. 表单已提交给操作

  6. 行动有所作为

  7. 操作返回包含大量数据的视图
  8. 视图呈现,再次显示所有选项
  9. 问题是我必须在操作中删除该项目。

    准确地说:

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

    这是视图中的代码:

    <%@  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();
    

    但编译错误了!

1 个答案:

答案 0 :(得分: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...
        }
   });
}

在提供错误的行中提供有关您想要完成的内容的更多详细信息。您正在尝试检查对象列表是否包含selectlistitem。