2016-03-03 132 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); 
} 

感谢您的帮助和解释!