Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List MVC 4-使用LINQ进行排序';t使用Ajax.BeginForm和我的For循环_List_Asp.net Mvc 4_Sorting_Lambda - Fatal编程技术网

List MVC 4-使用LINQ进行排序';t使用Ajax.BeginForm和我的For循环

List 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

我用C#和MVC编写了一些代码,我有一个按钮,用于按asc和desc对数据列表进行排序。逻辑在我的控制器中工作,我能够调用对列表进行排序的方法,在断点处我可以看到它已被排序

但这很奇怪,因为当我在局部视图中循环浏览我的列表时,它永远不会工作。我在视图中使用断点来确保项目的顺序与当前相同。但这就像新值不会呈现到屏幕上一样

TeamManagement.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
@{
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将删除所有验证错误和警告。这并不理想。