2015-02-07 3 views
2

У меня есть страница, в которой перечислены все ученики и предложены пользователям добавить новую.ValidationSummary on partial View

Student Controller:

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

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

Частичный вид '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 без отображения ValidationMessage и ValidationSummary.

Что я должен изменить, чтобы сохранять сообщения об ошибках?

+0

вы должны вернуться в тот же вид, что и return this.view (ваша модель) вместо redirecttoAction –

+0

@frebin francis, если я получу только Create view без представления List. – koryakinp

ответ

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