【问题标题】:prevent duplicates items listview form listbox asp.net mvc3防止重复项目列表视图表单列表框asp.net mvc3
【发布时间】:2014-05-02 09:37:32
【问题描述】:

我有一个IEnumerable 列表,我想防止从我的列表框中添加重复项(列表中已存在的项)。我发现我必须使用 LINQ,但因为我是 ASP.NET 的新手。在向列表中添加新项时,我不知道如何将列表项与列表框项进行比较:

这就是我的列表的显示方式::

   public ActionResult Liste()
   {
     try
     {
        List<RubriquepointageVM> lstVM = ServiceApplicatif.GetListe()
                                                          .OrderBy(x => x.Rubrique_PointageId)
                                                          .ToList();

        //  Drop Down List des listRubrique

        IEnumerable<RubriqueVM> listRubrique = RefDataManager.GetRefData<RubriqueVM>() as IEnumerable<RubriqueVM>;
        if (listRubrique.Any())
        {
            ViewBag.idrub = listRubrique.First().RubriqueId;
        }

        ViewData["CodeRubrique"] = new SelectList(listRubrique, "RubriqueId", "CODELIBELLE");

        return View(lstVM);
    }

    catch (Exception ex)
    {
        LoggerRubriquepointage.Error(string.Format("Exception : {0}", ex.Message.ToString()));
        throw new Exception("Erreur lors du chargement.");
    }
}

我想知道的是如何使用 LINQ 防止从我的列表框中添加我的 Rubriqueintermediarelist 中的现有项目。

我的 Save() 方法:

public JsonResult Save([DataSourceRequest] DataSourceRequest dsRequest, RubriquepointageVM vm)
    {
        try
        {
            IEnumerable<RubriqueVM> listRubrique = RefDataManager.GetRefData<RubriqueVM>() as IEnumerable<RubriqueVM>;
            ViewData["CodeRubrique"] = new SelectList(RefDataManager.GetRefData<RubriqueVM>(), "RubriqueId", "CODELIBELLE", 976);

            List<RubriquepointageVM> lstRubriqueinter = ServiceApplicatif.GetListe();

            **//Iwant my test to be her before adding an item**

           RubriquepointageVM rub = ServiceApplicatif.Save(vm); 


        DataCache dataCache = new DataCache(CurrentSecurityContext.TenantID);
            dataCache.DropDataCache<RubriquepointageVM>();

            return Json(new[] { lstVMrub }.ToDataSourceResult(dsRequest, ModelState));

        }


        catch (Exception ex)
        {
            LoggerRubriquepointage.Error(string.Format("Exception : {0}", ex.Message.ToString()));
            throw new Exception("Erreur lors de l'enregistrement.");


        }

标签: c# linq asp.net-mvc-3 listbox


【解决方案1】:

正如我在我的 cmets 中所说,我无法确切地看到您要做什么,但根据我收集到的信息,我会尝试以下操作:

    if(! lstRubriqueinter.Any(x => x.RubriqueId == vm.RubriqueId))
    {
           RubriquepointageVM rub = ServiceApplicatif.Save(vm); 
        // you may need to add this rub to the list at this point. You will  have a better idea.
    }

我没有测试过这段代码,因为你的问题我没有太多要继续的。

【讨论】:

  • 我已经编辑了我的文章以清除我的问题,即使是请解释一下你为我编码的内容
  • 好的,我已经编辑了答案,以便更准确地适用于您的情况。据我了解,您只想将新的 Rubrique 项目添加到 lstRubriqueinter 列表中,前提是它不存在。我的代码就是这样做的。它说“如果没有任何 Rubriques 'x' 与您正在保存的 vm 具有相同的 RubriqueId 然后继续保存。
  • 是的,它对我有用,只是我将 lstRubriqueinter 更改为 listRubrique 因为它是要添加的列表视图:但它只是不允许要添加相同的项目,我该如何添加错误消息,我必须使用 modelstate Validation
  • 嗨,smarttech。对不起。验证问题有点超出我的理解,因为我在 MVC 工作已经很长时间了,在这里我无法提出任何有意义的建议。我必须去谷歌搜索 - 我相信你有能力自己做;-)如果我想我会怎么回答!
  • 嗨,Tomás,非常感谢您的帮助,非常感谢您的帮助,没关系,我通过谷歌搜索找到了我需要的内容:我只是添加了消息验证:** ModelState.AddModelError( "Rubrique", "erreur de doublons");**
猜你喜欢
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多