2

누구든지 MVC3/C#의 한보기에서 다른보기로 양식을 전송하는 것을 도울 수 있습니까?하나의보기 양식을 MVC3의 다른보기로 전송할 수 있습니까?

1) 나는 그것이 페이지를 검토하도록 리디렉션됩니다 해당 필드를 제출 내가 사용하면 입력 할 사용자의 약 6 필드가 페이지를 만들 수 있습니다 여기에

는 시나리오입니다.

2) 사용자가 리뷰 페이지를 방문하면 작성 페이지에 입력 한 정보가 사용자에게 표시되어야합니다.

3) 검토 페이지에 편집 버튼이 있으므로 사용자가 편집 버튼을 클릭하면 모든 정보를 입력 한 작성 페이지로 돌아가서 정보를 다시 업데이트 할 수 있습니다.

ViewData/ViewBag 또는 부분보기를 사용하여이 시나리오를 처리 할 수 ​​있습니까? 어떻게해야할지 모르겠다.

+0

PartialView는 시나리오를 구현하는 데 충분합니다. –

답변

2

Models 폴더에 클래스를 만들고 MyViewModel이라고 부르면 사용자가 편집해야하는 모든 6 개의 속성을 해당 클래스에 정의해야합니다. 보기에서보기를 작성하면 검토 조치로 다시 게시하도록 정의 된 양식 요소 내에 모든 입력 필드를 표시합니다. 보기의 중요한 부분이 될 것입니다 :

MyController에 클래스에서
@model MyViewModel 
@using (Html.BeginForm("Review", "MyController")) 
{ 
    //here there's your input field 
    @Html.TextBoxFor(m => m.prop1) 
    // and so on 
} 

, 당신은 검토 방법이 검토보기에

public ActionResult Review(MyModel mm) 
{ 
    if (ModelState.IsValid) 
    { 
     return View(mm); 
    } else return RedirectToAction("Create"); 
} 

그리고 마침내를 다음과 같이 정의해야합니다, 당신은거야 이 :

public class ViaggioController : Controller 
{ 
public ActionResult Create() 
{ 
    var emptyModel = new MyViewModel(); 
    return RedirectToAction("Edit", new { mm = emptyModel }); 
} 
public ActionResult Edit(MyViewModel mm) 
{  
    return View(mm); 
} 

public ActionResult Review(MyViewModel mm) 
{ 
    if (ModelState.IsValid) 
    { 
     return View(mm); 
    } 
    else 
     return RedirectToAction("Create"); 
} 
} 
:

@model MyViewModel 
//show up all the field to be reviewed 
@Html.DisplayFor(m=>m.prop1) 
//and so on 
// now a form to pastback again all the data to the edit page 
@using (Html.BeginForm("Edit", "MyController")) 
{ 
    //here there's your hidden field 
    @Html.HiddenFor(m => m.prop1) 
    // and so on 
    <input type="submit" value="Re-edit the fields"/> 
} 

컨트롤러 클래스 MyController에 다음 코드를해야합니다

+0

왜 편집 페이지로 리디렉션해야합니까? public ActionResult Create() { var emptyModel = new MyViewModel(); return RedirectToAction ("편집", 새 {mm = emptyModel}); } – updev

+0

Create는 내 Get Method이므로 편집에서 리디렉션하면 오류가 발생합니다. – updev

+0

아이디어는 create가 사전로드되지 않은 데이터가있는 편집 페이지에 불과하다는 것입니다. 이렇게하면 새로운 (비어있는) 모델을 만들고 편집 작업을 다시 사용할 수 있습니다. 또는 빈 모델을 준비하고 모델을'return View ("Edit", mm);와 함께 다른 뷰에 전달하는 다른 뷰를 사용할 수 있습니다. – themarcuz

0

Asp.Net MVC를 사용하고있는 것을 볼 수 있습니다. 따라서 사용자가 입력 한 6 개의 필드가 들어있는 Model 객체가 생성보기에 의해 백업되고 내장 된 Model Validation을 사용하고 있다고 가정합니다. 그렇다면, 당신이 할 필요가있다 : 당신의 생성 컨트롤러 Httpost 작업에 양식을 게시하면

  1. 및 모델 상태가 유효, 그것을 TempData를 사용하여 동일한 모델 객체를 전달하여 검토 컨트롤러로 리디렉션 [] .
  2. 검토 컨트롤러가 모델 개체의 내용을 표시하는보기를 제공합니다. Create Controller를 호출 할 뷰에 편집 링크를 구현하십시오. 동일한 모델을 Create Controller로 다시 전달하는 방법이 필요합니다. 아마도 이것을하기 위해 TempData [] 또는 Session veriable을 사용할 수 있습니다. ActionLink 도우미를 사용하여 복잡한 객체 (예 : 모델)를 전달할 수 있다고는 생각하지 않습니다.
  3. Create Crontroller Httpost Action은 모델을 가져 와서 사용자가 데이터를 편집 할 수 있도록보기를 제공합니다.
+0

리디렉션에서 모델을 전달할 수 없습니다. 그러나 포스트 백에서 편집 뷰를 반환 할 수는 있습니다. – danludwig

+0

예 6 필드의보기 모델이 있습니다. viewmodel 객체를 create create에서 review 액션으로 전달하는 방법, 리뷰에서 편집 (채워진 정보로 생성)을 같은 컨트롤러 내에서 전달하는 방법과 같은 예제를 설명해 주시겠습니까? – updev

+0

@updev TempData [] 또는 Session varaibles가 내 머리 위로 움직여야합니다.다른 방법도있을 수 있습니다. –

관련 문제