2012-08-29 15 views
6

MVC 3の新機能です。MVCからビューへのデータの送信

コントローラからビューに強く型付けされたオブジェクトを送信する方法は分かりました。私が今持っているのは、そのデータで構成される表/フォームを含むビューです。

ユーザーは、そのビュー(htmlページ)にある間にそのデータを変更できます。

「保存」をクリックすると、ビューからコントローラにデータを送信してデータベースを更新する方法を教えてください。

コントローラーメソッドをオーバーロードして、モデルタイプのパラメーターを受け入れることはできますか?いくつかのソースコードを提供してください。

(データベースに永続データのコードを表示しないでください、私はその部分を行う方法を知っています)。

ご協力いただきありがとうございます。私もMVCで@Html.BeginForm()

答えて

9

投稿データ用に作成されたアクションメソッドが好きです。それでは、あなたはUserViewModelを持っているとしましょう:

public class UserViewModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

その後UserControllerで:

public class UserController 
{ 
    [HttpGet] 
    public ActionResult Edit(int id) 
    { 
     // Create your UserViewModel with the passed in Id. Get stuff from the db, etc... 
     var userViewModel = new UserViewModel(); 
     // ... 

     return View(userViewModel); 
    } 

    [HttpPost] 
    public ActionResult Edit(UserViewModel userViewModel) 
    { 
     // This is the post method. MVC will bind the data from your 
     // view's form and put that data in the UserViewModel that is sent 
     // to this method. 

     // Validate the data and save to the database. 

     // Redirect to where the user needs to be. 
    } 
} 

私はすでにあなたのビューでフォームを持っていると仮定しています。フォームが正しいアクション方法にデータを投稿することを確認する必要があります。私の例では、次のようなフォームを作成します。

@model UserViewModel 

@using (Html.BeginForm("Edit", "User", FormMethod.Post)) 
{ 
    @Html.TextBoxFor(m => m.Name) 
    @Html.HiddenFor(m => m.Id) 
} 

これの鍵は、MVCが行うモデルバインディングです。私が使ったHtml.TextBoxのようなHTMLヘルパーを使いましょう。また、追加したビューコードの一番上の行が表示されます。 @モデルは、あなたがそれをUserViewModelに送るビューを指示します。エンジンはあなたのために働くことができます。

編集:いいですか、メモ帳でそのすべてを行いました、IDのためにHiddenForを忘れました!

+2

+1は実質的に同じ答えを書いていました。ビュー部分についても、[EditorForModel()](http://msdn.microsoft.com/en-us/library/ee430917(v=v2/98).aspx)とDataAnnotationsを使用して、編集可能な各プロパティを手動で設定するのではなく、出力します。 – James

+1

偉大なキャッチ@nonnb!私の例を編集しました。 – Gromer

+0

@James、私はEditorForModelで本当に多くのことをしたことはありません。彼のサイトがどれほど複雑かはわかりません。しかし、良い提案。 – Gromer

1

を使用して希望

、POSTまたはGET HttpRequestsからデータを掻き出しの行為は、結合モデルと呼ばれている - これに関連SO questionsがたくさんあります。

すぐに使用できるように、MVCは規約に基づいてGetとPost変数をバインドします。 'FormName'という名前のフォームフィールドは、同じ名前のコントローラ上のパラメータにバインドされます。

モデルバインディングはオブジェクトに対しても機能します。MVCはコントローラのオブジェクトをインスタンス化し、フォームと同じ名前でプロパティを設定します。

+0

私はそれを勉強できるように私はいくつかのソースコードを教えていただけますか? – Subby

関連する問題