ASP.NET MVCフォーム提出チュートリアル


前の2つの文章では、私たちはそれぞれ簡単なASPを作りました.NET MVCの例とデータのバインドを行い,本稿ではASP.NET MVC Frameworkはフォームの提出を実現し、ここでフォームデータを取得する方法がいくつかあり、自動的にマッピングしたり、Requestオブジェクトで取得したりすることができます.
新規データの実装
1.ここでは、前のBlogの例も採用しています(後述する例では、この例をずっと使用しています).その前に、前回の例のBlogRepositoryを変更して、Addメソッドを追加します.
public void Add(Post post)
{
    BlogDataContext db = new BlogDataContext();

    db.Posts.InsertOnSubmit(post);
    db.SubmitChanges();
}

2.新しいPostページへのリンクをIndexビューに追加し、ActionLink()メソッドを使用します.
<h2>ASP.NET MVC Framework Sampleh2> <hr /> =Html.ActionLink("Home", new { action="Index"})%> |
=Html.ActionLink("New Post", new { action="New"})%>
<div>     foreach (Post post in ViewData)
      { %>     <div class="postitem">         <strong>Titlestrong>=Html.Encode(post.Title) %>br>         <strong>Authorstrong>=Html.Encode(post.Author) %>br>         <strong>PubDatestrong>=Html.Encode(post.PubDate.ToShortDateString()) %>br>         <strong>Contentstrong>=Html.Encode(post.Description) %>br>     div><br />      } %> div>

上のコードでは、4行目にNew Postハイパーリンクを追加し、そのリンクのactionをNewと指定します.ここではaction名で指定することもできます.
<h2>ASP.NET MVC Framework Sampleh2> <hr /> =Html.ActionLink("Home", "Index")%> | =Html.ActionLink("New Post", "New")%>  <div>     foreach (Post post in ViewData)
      { %>     <div class="postitem">         <strong>Titlestrong>=Html.Encode(post.Title) %>br>         <strong>Authorstrong>=Html.Encode(post.Author) %>br>         <strong>PubDatestrong>=Html.Encode(post.PubDate.ToShortDateString()) %>br>         <strong>Contentstrong>=Html.Encode(post.Description) %>br>     div><br />      } %> div>

3.コントローラのNew actionコードを作成します.ここでは、新しいPostビューに移行するだけで、他の操作は必要ありません.

[ControllerAction]
public void New()
{ 
    //          RenderView("New");
}

4.Newビューを作成します.ここでは、ユーザーがデータを入力するためのフォームを提供します.HTMLコードを作成するには、次のようにします.
<h2>New Posth2> <hr /> <div class="postitem">     Title:<input id="title" name="title" type="text" /><br /><br />     Author:<input id="author" name="author" type="text" /><br /><br />     Content:<textarea id="description" name="description" cols="40" rows="5">textarea><br /><br />     <input type="submit" value="Save" /> div>
       HTML form  ,     action        Post action,     Add,    method Post,                  :
<h2>New Posth2> <hr /> <div class="postitem">     <form action="Add" method="post">         Title:<input id="title" name="title" type="text" /><br /><br />         Author:<input id="author" name="author" type="text" /><br /><br />         Content:<textarea id="description" name="description" cols="40" rows="5">textarea><br /><br />         <input type="submit" value="Save" />     form> div>

フォームデータの取得
上記の手順が完了すると、コントローラのAdd actionのコードを作成できます.ここでフォームのデータを取得し、データベース、ASPに書き込む必要があります.NET MVC Frameworkでは、フォームデータを取得する方法がいくつか用意されています.
1.自動マッピング
この方法では、メソッドのパラメータ定義フォームの名前、ASP.NET MVC Frameworkは、フォームのデータをformのActionに直接割り当てる方法パラメータに、次のコードで示すように、マッピングを自動的に支援します.

[ControllerAction]
public void Add(string title, string author, string description)
{
    Post post = new Post();
    post.Title = title;
    post.Author = author;
    post.Description = description;
    post.PubDate = DateTime.Now;

    BlogRepository repository = new BlogRepository();
    repository.Add(post);

    RedirectToAction("Index");
}

2.第1の方法では、インタフェース上のフォームが多すぎると、メソッドのパラメータが大きくなり、再構築でいう「汚れたコード」になってしまうようです.この問題を解決するために、フォーム変数を使用してフォームの値を取得し、コードを次のように見ることもできます.

[ControllerAction]
public void Add()
{
    Post post = new Post();
    post.Title = Request.Form["title"];
    post.Author = Request.Form["author"];
    post.Description = Request.Form["description"];
    post.PubDate = DateTime.Now;

    BlogRepository repository = new BlogRepository();
    repository.Add(post);

    RedirectToAction("Index");
}

上記の2つの方法は、フォームの値を取得し、データベースに保存してIndex actionに移行して処理します.
3.MVCToolkitでは、フォームの値を取得するための拡張方法もいくつか提供されています.後述します.
パス選択の設定
このステップはいつでも忘れられないが、今回はcontroller/actionの形式に変更し、コードは以下の通りである.
void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup     RouteTable.Routes.Add(
                new Route                 {
                    Url = "[controller]/[action]",
                    Defaults = new { action = "Index" },
                    RouteHandler = typeof(MvcRouteHandler)
                });
}

データ増加の完了
上記の例は、まずIndexビューに新しいPostリンクがある場合に実行されます.
New Postをクリックすると、
コミット後、新しいPostを追加し、Indexビューに移動します.
終わりの言葉
ASPについてNET MVC Frameworkで実装フォームの提出の簡単な例はここで終わります.前の3つの簡単な文章を通じて、皆さんはASPに対してNET MVC Frameworkはすでに大まかな認識を持っていて、後で私はいくつかの深い文章とMVCToolktiが提供するいくつかのHTML Helperの方法を書きます:)