2

誰でもMVC3/C#のあるビューから別のビューにフォームを転送できますか?ここで1つのビューフォームを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"); 
} 

そして最後に、次のように定義レビューの方法があるでしょう、あなたは'LL持っている:

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( "Edit"、new {mm = emptyModel}); } – updev

+0

私はCreateメソッドをGetメソッドと呼ぶので、そこからEditにリダイレクトするとエラーになります。 – updev

+0

アイデアは、作成は、あらかじめロードされていないデータを含む編集ページに過ぎないということですか? これを行うと、新しい(空の)モデルを作成し、編集アクションを再利用できます。あるいは空のモデルを準備して、 'return view(" Edit "、mm);で好きなようにモデルを別のビューに渡す別のビューを使うことができます – themarcuz

0

私はAsp.Net MVCを使用しているので、ユーザーが入力した6つのフィールドを保持するモデルオブジェクトによって作成ビューがバックアップされており、組み込みの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は頭の上からうまくいくはずです。他の方法もあるかもしれません。 –

関連する問題