私はこの問題を解決できません - あなたの助けてください。VS ASPがモデルから正しい値を返さない
私は単純なモデルがあります:私は、単純なASP.NETのフォームにこれをロードし、家族のモデルを表示
Family family = new Family
{
FamilyName = "Smith",
Children = new List<Child>
{
new Child { Name = "Samantha"},
new Child { Name = "Julie"},
new Child { Name = "Michael"},
new Child { Name = "Terrance"},
new Child { Name = "Joseph"},
}
};
:
public class Family
{
public long ID { get; set; }
public string FamilyName { get; set; }
public virtual List<Child> Children { get; set; }
}
をし、そのようなデータでそれを設定。家族から関連する子を削除するボタンもあります。 List<Child>
のインデックス値を送信します。
int i = Convert.ToInt32(btn);
family.Children.Remove(family.Children[i]);
ただし、フォームを削除しようとする子どもは、常に上位4つのエントリを返します。
Michael
を削除します。私はオブジェクトをトレースし、正しい子がモデルから削除され、モデルをASPページビルドまで追跡し、正しいモデル値がページビルダーに送信されます。しかし、Michael
がモデルにないにもかかわらず、彼は何とか彼を覚えて、結果の一部として彼を返し、最後から最後のものを常に落とす。
Original List Returned list
------------- -------------
Samantha Samantha
Julie Julie
Michael Michael
Terrance Terrance
Joseph
私はこれをVS-2013、VS-2015、およびVS-2017でテストしました。すべてのバージョンが同じ結果を返します。
これはVSまたは.NETのバグのようですが、実際にはあまりにも基本的なようです。誰でも問題を突き止めることができますか?
コードで:問題を示しているプロジェクトを置くhttps://github.com/johnmackerras/wierdVSerror
クリックしたボタンのインデックスに対応するデバッガで "btn"の値をチェックできますか?私は、同じ名前(btn)を持つ複数のボタンが単一のフォームに含まれているため、送信時には最後の値だけを送信するため、常にあなたのコレクションから最後のエントリを削除する同じ最後の値を受け取ることに疑いがあります。 私の疑惑が正しければ、あなたのフォームの隠しフィールドを使用して、 "ItemToDelete"と言って、そのボタンをクリックするとjavascriptを使って、この隠しフィールドの値をボタンのインデックスに設定する必要があります。サーバー側で "ItemToDelete"を使用します。 – Gurpreet