List MVC 4-使用LINQ进行排序';t使用Ajax.BeginForm和我的For循环
我用C#和MVC编写了一些代码,我有一个按钮,用于按asc和desc对数据列表进行排序。逻辑在我的控制器中工作,我能够调用对列表进行排序的方法,在断点处我可以看到它已被排序 但这很奇怪,因为当我在局部视图中循环浏览我的列表时,它永远不会工作。我在视图中使用断点来确保项目的顺序与当前相同。但这就像新值不会呈现到屏幕上一样 TeamManagement.cshtmlList MVC 4-使用LINQ进行排序';t使用Ajax.BeginForm和我的For循环,list,asp.net-mvc-4,sorting,lambda,List,Asp.net Mvc 4,Sorting,Lambda,我用C#和MVC编写了一些代码,我有一个按钮,用于按asc和desc对数据列表进行排序。逻辑在我的控制器中工作,我能够调用对列表进行排序的方法,在断点处我可以看到它已被排序 但这很奇怪,因为当我在局部视图中循环浏览我的列表时,它永远不会工作。我在视图中使用断点来确保项目的顺序与当前相同。但这就像新值不会呈现到屏幕上一样 TeamManagement.cshtml @model Website.Models.modelTeamSelect @{ ViewBag.Title = "Foot
@model Website.Models.modelTeamSelect
@{
ViewBag.Title = "Football App";
}
@section featured {
}
@using (Ajax.BeginForm("_PartialTeams",
new
{
model = this.Model
},
new AjaxOptions
{
HttpMethod = "POST",
UpdateTargetId = "divCreatedTeams",
InsertionMode = InsertionMode.Replace
}))
{
<div id="divTeams" style="float: left; padding: 10px;">
<h3>Create a new team:</h3>
@Html.LabelFor(m => m.team.TeamName)
@Html.TextBoxFor(m => m.team.TeamName)
<input type="submit" value="Add Team" name="btnSubmit" />
</div>
Html.RenderPartial("~/Views/Partials/_PartialTeams.cshtml");
}
@model Website.Models.modelTeamSelect
<div id="divCreatedTeams" style="float: left; padding: 10px;">
<h3>Your created teams:</h3>
<input type="submit" value="Asc" name="btnSubmit" />
<input type="submit" value="Desc" name="btnSubmit" />
<br />
@if (Model.teams.Count > 0)
{
for (int i = 0; i < Model.teams.Count; i++)
{
@Html.EditorFor(m => m.teams[i].TeamName)
<input type="button" value="Update team name" name="btnSubmit"/>
<input type="button" value="Remove team" name="btnSubmit"/>
<br />
}
}
</div>
@model网站.Models.modelTeamSelect
@{
ViewBag.Title=“足球应用程序”;
}
@特色栏目{
}
@使用(Ajax.BeginForm(_PartialTeams),
刚出现的
{
model=this.model
},
新选择
{
HttpMethod=“POST”,
UpdateTargetId=“divCreatedTeams”,
InsertionMode=InsertionMode.Replace
}))
{
创建一个新团队:
@LabelFor(m=>m.team.TeamName)
@Html.TextBoxFor(m=>m.team.TeamName)
RenderPartial(“~/Views/Partials/_PartialTeams.cshtml”);
}
\u PartialTeams.cshtml
@model Website.Models.modelTeamSelect
@{
ViewBag.Title = "Football App";
}
@section featured {
}
@using (Ajax.BeginForm("_PartialTeams",
new
{
model = this.Model
},
new AjaxOptions
{
HttpMethod = "POST",
UpdateTargetId = "divCreatedTeams",
InsertionMode = InsertionMode.Replace
}))
{
<div id="divTeams" style="float: left; padding: 10px;">
<h3>Create a new team:</h3>
@Html.LabelFor(m => m.team.TeamName)
@Html.TextBoxFor(m => m.team.TeamName)
<input type="submit" value="Add Team" name="btnSubmit" />
</div>
Html.RenderPartial("~/Views/Partials/_PartialTeams.cshtml");
}
@model Website.Models.modelTeamSelect
<div id="divCreatedTeams" style="float: left; padding: 10px;">
<h3>Your created teams:</h3>
<input type="submit" value="Asc" name="btnSubmit" />
<input type="submit" value="Desc" name="btnSubmit" />
<br />
@if (Model.teams.Count > 0)
{
for (int i = 0; i < Model.teams.Count; i++)
{
@Html.EditorFor(m => m.teams[i].TeamName)
<input type="button" value="Update team name" name="btnSubmit"/>
<input type="button" value="Remove team" name="btnSubmit"/>
<br />
}
}
</div>
@model网站.Models.modelTeamSelect
您创建的团队:
@如果(Model.teams.Count>0)
{
对于(int i=0;im.teams[i].TeamName)
}
}
我的控制器中的排序逻辑
[HttpPost]
public PartialViewResult _PartialTeams(string BtnSubmit, modelTeamSelect modelTeamSelect)
{
switch (BtnSubmit)
{
case "Add Team":
modelTeamSelect.teams.Add(modelTeamSelect.team);
break;
case "Asc":
FootballRepository = new Repository.FootballRepository();
modelTeamSelect.teams = FootballRepository.Sort(modelTeamSelect, BtnSubmit);
break;
case "Desc":
FootballRepository = new Repository.FootballRepository();
modelTeamSelect.teams = FootballRepository.Sort(modelTeamSelect, BtnSubmit);
break;
}
return PartialView("~/Views/Partials/_PartialTeams.cshtml", modelTeamSelect);
}
public List<Models.modelTeam> Sort(Models.modelTeamSelect modelTeamSelect, string sort)
{
switch (sort)
{
case "Asc":
modelTeamSelect.teams = modelTeamSelect.teams.OrderBy(t => t.TeamName).ToList();
break;
case "Desc":
modelTeamSelect.teams = modelTeamSelect.teams.OrderByDescending(t => t.TeamName).ToList();
break;
}
return modelTeamSelect.teams;
}
[HttpPost]
公共PartialViewResult\u PartialTeams(字符串BtnSubmit,modelTeamSelect modelTeamSelect)
{
交换机(BtnSubmit)
{
案例“添加团队”:
modelTeamSelect.teams.Add(modelTeamSelect.team);
打破
案例“Asc”:
FootballRepository=新建存储库。FootballRepository();
modelTeamSelect.teams=FootballRepository.Sort(modelTeamSelect,BtnSubmit);
打破
案例“Desc”:
FootballRepository=新建存储库。FootballRepository();
modelTeamSelect.teams=FootballRepository.Sort(modelTeamSelect,BtnSubmit);
打破
}
返回PartialView(“~/Views/Partials/\u PartialTeams.cshtml”,modelTeamSelect);
}
公共列表排序(Models.modelTeamSelect modelTeamSelect,字符串排序)
{
开关(分拣)
{
案例“Asc”:
modelTeamSelect.teams=modelTeamSelect.teams.OrderBy(t=>t.TeamName.ToList();
打破
案例“Desc”:
modelTeamSelect.teams=modelTeamSelect.teams.OrderByDescending(t=>t.TeamName).ToList();
打破
}
返回modelTeamSelect.teams;
}
我的团队收藏主模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Website.Models
{
public class modelTeamSelect
{
public modelTeamSelect()
{
teams = new List<modelTeam>();
team = new modelTeam();
}
public List<modelTeam> teams { get; set; }
public modelTeam team { get; set; }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
名称空间网站.模型
{
公共类modelTeamSelect
{
公共modelTeamSelect()
{
团队=新列表();
团队=新模型团队();
}
公共列表组{get;set;}
公共模型团队{get;set;}
}
}
我的方法Sort完成了它的工作,但在视图中它永远不会正确显示。e、 总是错误的顺序
任何人都有任何想法,因为我被卡住了
屏幕截图
在屏幕截图中,我单击“按Asc排序”,您可以看到它将纽卡斯尔列为列表中的第一项。但是当页面呈现时,它会说West Ham first,即使它正在使用for循环进行迭代。所有Html助手都倾向于使用
ModelState
值而不是实际的模型值
因此,即使您在视图@Html.EditorFor(m=>m.teams[i].TeamName)中的操作中对modelTeamSelect.teams
进行了就地排序,
调用也将使用ModelState
中的原始(排序前)值
解决方案:如果要就地更新操作参数,则只需在返回视图/部分视图之前清除ModelState
:
[HttpPost]
public PartialViewResult _PartialTeams(string BtnSubmit,
modelTeamSelect modelTeamSelect)
{
// ... Do the sorting, etc.
ModelState.Clear();
return PartialView("~/Views/Partials/_PartialTeams.cshtml", modelTeamSelect);
}
在这篇文章中,您可以阅读更多关于助手为何如此工作的信息:似乎您在多个位置都有排序方法。一个在控制器中,另一个在足球存储库中。是这样吗?另外,了解modelTeamSelect.teams实际上是什么类型也会很有帮助。它是一个列表吗?@AaronPalmer FootballRepository是一个进行排序的类,但我计划稍后重构它。我承认这有点过度设计,但问题是在视图中。我会附上一个截图和模型类。任何人,我都不明白为什么它不工作?谢谢你,我会检查它,让你知道它是怎么回事@谢谢你!我知道我错过了什么,我是。我添加了ModelState.Clear()并成功了。清除ModelState将删除所有验证错误和警告。这并不理想。