2015-02-07 59 views
2

我有一个列出所有学生的页面并提示用户添加新页面。Validation摘要部分视图

学生控制器:

public ActionResult Index() 
{ 
    return View(db.getStudents()); 
} 

public ActionResult Create(Student student) 
{ 
    if (ModelState.IsValid) 
    { 
     //some code here 
    } 
    else 
    { 
     return RedirectToAction("Index"); 
    } 
} 

局部视图 '索引':

@model IEnumerable<Student> 
@Html.DisplayNameFor(model => model.StudentName) 
@foreach (var item in Model) { 
    @Html.DisplayFor(modelItem => item.StudentName) 
} 
@{ Html.RenderAction("Create", "Student"); } 

局部视图 '创建':

@model Student 
@using (Html.BeginForm("Create", "Student", FormMethod.Post)) 
{ 
    @Html.ValidationSummary(true, "") 
    @Html.LabelFor(model => model.StudentName) 
    @Html.EditorFor(model => model.StudentName) 
    @Html.ValidationMessageFor(model => model.StudentName, "") 
    <input type="submit" value="Create" /> 
} 

我的问题:

当我发布形式为Create引发的操作,如果模型无效,则重定向到Index而不显示ValidationMessageValidationSummary

我应该更改哪些内容以保留错误消息?

+0

你应该返回到像返回this.view(你的模型),而不是redirecttoAction相同的看法 – 2015-02-07 07:40:23

+0

@frebin弗朗西斯,如果我这样做我只得到没有列表视图创建视图。 – koryakinp 2015-02-07 08:04:44

回答

2

您需要有一个视图模型来完成您的要求,以列出学生并从一个页面创建学生。

public class IndexViewModel 
{ 
    public IEnumerable<Student> Students {get;set;} 

    public Student NewStudent {get;set;} 
} 

Index.cshtml:

@model IndexViewModel //Have the fully qualified model name here 
@Html.DisplayNameFor(model => model.StudentName) 
@foreach (var item in Model.Students) { 
    @Html.DisplayFor(modelItem => item.StudentName) 
} 
@{ Html.RenderAction("Create", "Student", Model.NewStudent); } 

控制器:

public ActionResult Index() 
{ 
    var viewModel = new IndexViewModel(); 
    viewModel.Students = db.getStudents(); 
    viewModel.NewStudent = new Student(); 
    return View(db.getStudents()); 
} 

public ActionResult Create(Student student) 
{ 
    var viewModel = new IndexViewModel();    

    if (ModelState.IsValid) 
    { 
     // Create student 
     // Do something else 
    } 
    else 
    { 
     viewModel.Students = db.getStudents(); 
     viewModel.NewStudent = student; 
     return View("Index", viewModel); 
    } 
} 

希望这有助于。这只是一个例子。您可以重构创建视图模型的代码。

+0

非常感谢您的先生。 – koryakinp 2015-02-09 15:14:36