2009-08-31 20 views
1

同じコントローラで複数のアクションを使用するにはどうすればよいですか?asp.netの同じコントローラとビューでの複数のアクションMVC

私は、asp.net mvcで新しいプロジェクトを開くときに表示されるデフォルトのプロジェクトを使用しています。

私はテキストボックスから値を受け入れるためにHomeController上の1つの以上indexアクションを追加しました...今、この

string strTest; 
     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Index(FormCollection frm) 
     { 
      strTest = frm["testbox"]; 

      return RedirectToAction("Index"); 
     } 

のように、私は戻って、ユーザに入力された値を表示する必要があります。これはどうすればいいですか?

私は通常、私はディスプレイに同じコンストラクタで別のインデックスを追加することはできません

<% using (Html.BeginForm()) 
    { %> 
<p> 
    <%=Html.TextBox("testbox")%> 
</p> 
<p> 
    <input type="submit" value="Index" /></p> 
<p> 
    <%= Html.ViewData["ReturnMessage"] %> 
</p> 
<% } %> 

..

public ActionResult Index() 
{ 
    this.ViewData.Add("ReturnMessage", strValue); 
    return View(); 
} 

は、ここで私は私の見解に入れてきたものだ。..コンパイラを、これを試してみました入力されたメッセージは、私が知っているC#で明白なユーザーに戻されます。しかし、どのようにしてメッセージをユーザーに返すのですか? ありがとう

答えて

1

簡単な方法を

あなたの意見で

<% using (Html.BeginForm()) {%> 
    <%= Html.TextBox("myInput") %> 
    <%= ViewData["response"] %> 
<%}%> 

あなたのコントローラーで;

+0

... 申し訳ありませんが、私が作ったばかげたミスでした...データベースからエンティティそのデータを戻す代わりにview()を返しました。オブジェクト参照例外がスローされました。 ありがとうございました – Josh

+0

probsなしJosh。うれしいことに私たちは働いています。 – griegs

1

ジョシュは、あなたが尋ねた前の質問を参照してください。

があり、私はそれが夜のテキストボックスのテキストにあなたのモデルから値を入れますModel.myInputだ <%= Html.textbox("myInput", Model.myInput....

を持っていました。

EDIT

それとも、単に行うテキストボックスにそれをしたくない場合は、

EDIT 2

、この場合には、データベースとは何の関係もあなたの新しいフォームビューモデルにできるだけ多くの項目を追加することはできませんし、それがあります。私がクラスを宣言した場所に関する以前の質問を参照してください。

クラスには、好きなだけ多くのプロパティを設定できます。したがって、string myResponse {get;set;}を追加すると、応答を返信することができますので、使用することができます<%=Model.myResponse%>

これが役立つことを願っています。

+0

私は知っていますが、今は...私はモデルなしでテストしています...私はmvcを全く知らない他の誰かに教える必要があるからです。 – Josh

+0

私は、あなたがプロジェクトにデータベースをインポートし、edmxファイルなどを構築する必要があるという意味でモデルを考えていますか? – Josh

+0

私はまだそれが好ましい方法であるので、あなたはそれをこのように教えるべきだと思います。私は実際にViewDataの大ファンではないが、それは個人的だ。私はいつもモデルアプローチを好むだろう。編集2 – griegs

3

コントローラは、送信されたパラメータに基づいて1つのルートに一致します。最も具体的な経路から最も具体的でない経路をレイヤーすることができ、順番にチェックします。ヒットした最初のものが勝つ。

他の答えは強くあなたのモデルがあなたのビューに送信された入力、またはのViewDataに保管のいずれかにある:

ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

次に、あなたのビューでアクセス:

<%= Html.Encode(ViewData["Message"]) %> 
+0

ビューは1つのモデルを受け入れます。これは、データベースや他のものとは関係なく、ビューのデータを格納します。クラスを定義してそのモデルをオーバーロードし、そのクラスをそのクラスで継承することができます。オーバーロードされたクラスには、都市のリストやプロダクトのリスト(ビューに必要なもの)のような複数のデータセットを含めることができます。 –

+2

+1正確に。そして、コレクション["???"]を使うよりはるかに良いアプローチです。私の考えでは。 – griegs

+0

ViewData ["Message"]の事は私のポストバックアクションでは機能しません。ユーザーがテキストボックスに名前を入力すると、Helloとその名前を迎えたい – Josh

関連する問題