[asp.net-mvc]第一个等级列表中跳

发布时间: 2017/3/25 3:26:02
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

如果您想要重新排列的问题,例如,并使最后一个问题将移动地方之前我所做的一切的问题是价值的关键,但看来我我错了,证明你收到此消息︰

'到当前页面类型的异常发生在 EntityFramework.dll 中,但在用户代码中未处理

附加信息: ID 属性是对象的关键信息的一部分,不能修改。

public ActionResult Up(int id , string st)
{
    var qus = db.Qusetions.Find(id);

    if(st == "up")
    {
        if(qus.ID != 1)
        {
            qus.ID = -1;
            var qusup = db.Qusetions.SingleOrDefault(q => q.ID == q.ID - 1);
            if (qusup != null)
            {
                qusup.ID = id;
            }
        }          
    }
    if (st == "down")
    {
        qus.ID = +1;
        var qusup = db.Qusetions.SingleOrDefault(q => q.ID == q.ID + 1);
        if (qusup != null)
        {
            qusup.ID = id;
        }
        db.SaveChanges();
    }

    return RedirectToAction("Index", new RouteValueDictionary(new { controller = "Qustions", action = "Index", id = id }));
}

解决方法 1:

你确实不应该使用主键 Id 为此目的。它要好得多,属性添加到您 Question ,将为单一目的的排序问题。

public class Qusetion
{
    // ...
    public int SortIndex {get; set;}
    // ...
}

你的控制器操作会像这样︰

public ActionResult ChangeSortIndex(int id , string st)
{
    var qus = db.Qusetions.Find(id);

    if(qus != null)
    {
        switch(st)
        {
            case "up":
                qus.SortIndex++;
                break;

            case "down":
                qus.SortIndex--;
                break;
        } 

        db.SaveChanges();
    }

    return RedirectToAction("Index", new RouteValueDictionary(new { controller = "Qusetions", action = "Index", id = id }));
}

当你显示你的问题你必须对它们进行排序︰

var questions = db.Qusetions.OrderBy(x => x.SortIndex)

此外请注意, SortIndex 非常简单的方式更新 (+ + 和--),你将不得不更新几个索引,以获得所需的排序。我想这可以为小型列表中工作。

你可以使用像更详细︰什么是最好的方法来管理列表中项目的排序顺序

注意︰ 在您的代码,是一个错字还是你真的拼写它︰对吗?

官方微信
官方QQ群
31647020