我正在使用C#和SQL Server 2005开发ASP .Net MVC 3应用程序。
在视图中,我有一个“Enregistrer”按钮,我在其中添加了一个JQuery脚本。
该脚本用于删除从DropDownList'Poste'中选择的项目。
此按钮用于在名为“ListG”的列表中保存一些值。
按钮完美运行的问题,但是当我添加脚本时,情况发生变化,按钮不起作用,变得静止(死机)。
我的问题情景:
表单已提交给操作
行动有所作为
问题是我必须在操作中删除该项目。
准确地说:
我有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();
但编译错误了!
答案 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。