2016-03-22 10 views
0

たとえば、質問のリストを並べ替えて、最後に質問を移動させたい場合は、前に行ったことはすべてキーの値ですが、間違っていたとの証拠は、あなたがこのメッセージが表示されます。「System.InvalidOperationException」種類の例外がEntityFramework.dllで発生したが、第1学年のリストでジャンプ

追加情報ユーザーコードで処理されなかった

:プロパティ「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カラムがプライマリキーの場合は、Idカラムを変更しないでください。エンティティに新しい列SortIndexを追加して、行をソートします。次に、この新しいプロパティを必要に応じて変更します。 – Lesmian

+0

ご協力ありがとうございますが、ソートインデックス – Sultan

+1

db.Qusetions.SingleOrDefault(q => q.SortIndex == q.SortIndex - 1)でリストを列挙するにはどうすればいいですか?現在のソート順を保持する別のフィールドを導入してください。主キーのID値は変更できません。 – Lesmian

答えて

0

あなたは本当に、この目的のために主キー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がで更新されていることに注意してください本当に簡単な方法(++と - )であり、複数のインデックスを更新して目的のソートを達成する必要があります。私は小さなリストの場合、これがうまくいくと思います。

あなたのようなより精巧なもの使用することができますWhat's the best way to manage list item sort order

注:あなたのコードでは、それはタイプミスであるか、あなたが本当にそれを綴るん:Quseションを?

+0

私にとって新しい地平を開いたとしても、ジレンマを説明するのは非常にクールで、実際には何百もの機能が前に間違っていて、それを修正することができませんでした。あなたへのご挨拶、クリエイター – Sultan

関連する問題