2015-02-07 1 views
2

모든 학생을 나열하고 새 사용자를 추가하라는 메시지가있는 페이지가 있습니다.유효성 확인 부분 요약보기

학생 컨트롤러 :

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 작업이 호출되고 모델이 유효하지 않은 경우 디스플레이 ValidationMessageValidationSummary없이 Index으로 리디렉션됩니다.

오류 메시지를 유지하려면 어떻게해야합니까?

+0

redirecttoAction 대신 this.view (사용자의 모델)를 반환하는 것과 같은보기로 돌아 가야합니다. –

+0

@frebin francis, 목록보기가없는보기 만 생성하면 얻을 수 있습니다. – 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