-1

投稿されたフォームデータにアクションメソッドでアクセスしてビューに表示する方法

MVC で入力ウィザードを作成しています。ユーザーからの入力を取得するためのビューと、入力データを表示するためのビューの 2 つのビューがあります。

モデルのコードは次のとおりです。

 public class Info
  {
    public int CustomerId { set; get; }
    public double Price { set; get; }
    public string name { set; get; }
  }
}

コントローラーのコード -

    public ActionResult FillCustomer()
    {
        return View();
    }

    public ActionResult DisplayCustomer(FormCollection frm)
    {
        Info info = new Info();

        info.name = Convert.ToString( Request.Form["name"]);
        info.Price = Convert.ToDouble(Request.Form["price"]);
        info.CustomerId = Convert.ToInt32(Request.Form["customerid"]);

        return View(info);
    }

FillCustomer ビューのコード -

<form method="post" action="DisplayCustomer">
Name: <input type="text" id="name" /><br />
Price: <input type="text" id="price" /><br />
CustomerId: <input type="text" id="customerid" />
<br />
<input type="submit" id="btn1" />
</form>
</body>
</html>

DisplayCustomer ビューのコード-

<body>
<div>
Name is <%=Model.name %> and ID is <%=Model.CustomerId %>

<%if (Model.Price > 200)
  {%>

Greater than 200

<%}
  else %>

<%{%>Lesser than 200 

    <%} %>
    </div>
</body>
</html>

デバッガーで確認しましたが、コントローラーは投稿されたデータを取得していません。

4

3 に答える 3

3

フォームの入力要素にはname属性が必要です

<form method="post" action="DisplayCustomer">
Name: <input type="text" id="name" name="name" /><br />
Price: <input type="text" id="price" name="price" /><br />
CustomerId: <input type="text" id="customerid" name="customerid" />
<br />
<input type="submit" id="btn1" />
</form>

これで、フォームデータを次のように取得します

        Info info = new Info();
        info.name = Convert.ToString( Request.Form["name"]);
        info.Price = Convert.ToDouble(Request.Form["price"]);
        info.CustomerId = Convert.ToInt32(Request.Form["customerid"]);

コントローラーでは、フォーム データはキーと値のペアとして受信されます。そして、キーは名前属性から生成されます。

于 2013-02-04T11:51:31.667 に答える
1

MVC を使用しているため、DisplayCustomer メソッドのパラメーターはビューから渡されたモデルであり、モデル バインダーによって暗黙的に作成されます。次のように、タイプを FormCollection から Info クラスに変更します。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DisplayCustomer(Info model)
{
   // you can now access to Info properties
}

このようにして Info オブジェクトの値が取り込まれ、これがあなたが達成しようとしているものだと思います。

于 2013-02-04T12:20:12.513 に答える
0

DisplayCustomer関数の属性トップを記述し忘れたと思います。それを書くだけで、うまくいくことを願っています。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DisplayCustomer(FormCollection frm)
{
    Info info = new Info();

    info.name = Convert.ToString( Request.Form["name"]);
    info.Price = Convert.ToDouble(Request.Form["price"]);
    info.CustomerId = Convert.ToInt32(Request.Form["customerid"]);

    return View(info);
}
于 2013-02-04T11:29:01.837 に答える