6

私はMVC 3にまったく慣れていません。

厳密に型指定されたオブジェクトをコントローラーからビューに送信する方法を知っています。私が今持っているのは、そのデータで構成されるテーブル/フォームを含むビューです。

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

「保存」をクリックしたときに、データベースを更新できるように、ビューからコントローラーにデータを送信するにはどうすればよいですか。

モデル タイプのパラメーターを受け入れるように Controller メソッドをオーバーロードする必要がありますか? ソースコードを教えてください。

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

私を助けてくれてありがとう。

私も使用したいと思います@Html.BeginForm()

4

2 に答える 2

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.TextBoxFor のような HTML ヘルパーを利用します。また、追加したビュー コードの一番上の行にも注目してください。@model は、ビューに UserViewModel を送信することを伝えます。エンジンを任せてください。

編集:良い呼び出しです。すべてメモ帳で行いましたが、Id の HiddenFor を忘れていました。

于 2012-08-29T15:30:16.383 に答える
1

MVC では、POST または GET HttpRequests からデータをスクレイピングする行為はモデル バインディングと呼ばれます。これに関連するSOの質問がたくさんあります。

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

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

于 2012-08-29T15:26:18.410 に答える