2016-03-03 41 views
0

這是我在stackoverflow的第一個問題,經過許多搜索,但我仍然有一個奇怪的ASP MVC問題。刪除列表<Model>(ASP MVC 5)

我有一個包含輸入的窗體中的視圖顯示列表。 我想允許用戶刪除一個或多個元素,通過檢查它並應用於提交。

看到問題的說明這裏:
See the illustration of the problem here

的型號:

public class MTest 
{ 
    public string Nom { get; set; } 
    public bool Delete { get; set; } 
} 

控制器:

public partial class TestController : Controller 
{ 
    public virtual ActionResult Index() 
    { 
     List<MTest> m = new List<MTest>(); 

     m.Add(new MTest() { Nom = "A", Delete = false }); 
     m.Add(new MTest() { Nom = "B", Delete = false }); 
     m.Add(new MTest() { Nom = "C", Delete = false }); 
     m.Add(new MTest() { Nom = "D", Delete = false }); 

     return View(m); 
    } 

    [HttpPost] 
    public virtual ActionResult Index(List<MTest> model) 
    { 
     model.RemoveAll(f => f.Delete == true); 

     return View(model); 
    } 
} 

的觀點:

@model List<MTest> 
@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @for (int i = 0; i < Model.Count; i++) 
    { 
     @Html.EditorFor(model => model[i].Delete) 
     @Html.EditorFor(model => model[i].Nom, new { 
    } 
    <input type="submit" value="Save" /> 
} 

目前,如果我檢查「B」 MTest元件(用於刪除的話),我可以看到它disapear當我通過在ActionResult Index(List model)步驟運行步驟。 但進入視圖:結果是不一樣的,我不明白爲什麼(見插圖)。

可以somenone幫助我嗎?

非常感謝!

回答

0

由於視圖操作的[HttpGet]總是生成新的FakeData。例如,如果您有一個從數據庫讀取數據的存儲庫,它必須正確工作。

0

據重複,該解決方案是return View(model);這樣之前添加ModelState.Clear();

控制器:

[HttpPost] 
public virtual ActionResult Index(List<MTest> model) 
{ 
    model.RemoveAll(f => f.Delete == true); 

    ModelState.Clear(); // You must add this row to clear cache 
    return View(model); 
} 

感謝您的幫助和解釋!