2012-03-01 7 views
2

をどのように扱うか、私は、うまくASP.NET Webフォームに精通だし、MVC 3に私のコードMVCでの混乱とそれがフォーム

を切り替える検討していた私はMVCを学習し、その中にいくつか理解しているのですが、私がまだ理解していない1つの問題があります。

それはこのように書き:私が選択したときには、JavaScriptによってボタンの押しをトリガしただろう、とそのボタンがそれだろうメソッドをトリガーしただろうという、DropDownListコントロールを持つことができた、Webフォームのコードで

別のDropDownが作成されたが、両方のDropDownが同じフォームに含まれていて、ユーザーが見ることができる実際のButton(および手動でユーザーによって押される)は、DropDownsと他のフィールド。

問題はMVCでこれを行う方法がわかりません。私の現在の理解から、アプリケーションにフォームデータを送信したいのであれば、それはモデルに従わなければなりません。それが私の現在の理解から私を混乱させる理由は、どのように最初のDropDownを送信するのですか最初のDropDownからのデータですか?また、他のドロップダウンにもMVCの霧のようなアイデアがありますが、特にDropDownの最初の点は、私を最も混乱させるものです。

誰もがこれにどのような形で私を助けることができれば大いに感謝します。

+1

MVCでは、この種のものはあなたによって書かれる必要があります:)あなたの場合、ドロップダウンリストでは、他のドロップダウンをカスケードするAJAXを実行するonchange()イベント用のjavascriptが必要です –

答えて

3

ここで大きな違いは、ASP.NET MVCに古いスタイルのポストバックがないことです。

この場合、ドロップダウンボックスの新しいデータの入手方法が制御されます。

フォームが完成し、サーバーにデータを送信する準備が整ったら、コントローラのメソッドにspcific型として送信しますが、その時点までに必要なデータにアクセスできます他のコントローラメソッド。

個人的には、JsonResultタイプを返すコントローラメソッドへのajaxリクエストを使用してjQueryを使用します。

ような何か:

$.getJSON("/MyController/GetSecondDropdownValues", function(result) { 
$.each(result, function() { 
    $('#mySecondDropdown').append($("<option />").val(this.Name)); 
}); 

C#

public JsonResult GetSecondDropdownValues(string initialDropdownValue) 
{ 
    /* Do the work to obtain the values here */ 
    return Json(returnedValues); 
} 
0

Asp.netのclasicはasp.netのMVCとは異なる考え方に従っています。最初はデスクトップフォームアプリケーションを模倣し、Webプラットフォームの詳細をabstracs(隠す)しようとします。 Asp.net mvcはMVCベースのフレームワークですが、実際には、実際のWebフレームワークです。何も関係のないWebを隠そうとしないからです。

つまり、ブラウザが送信するデータは、実際にはモデル自体ではなく、モデルを更新するためのデータです。ほとんどのチュートリアルでは、View Model(またはその一部)が返されますが、ブラウザから送信されたデータだけです。モデルがasp.net mvcアプリケーションにあるのをたくさん混乱させます。

は、どのように私はあなたがそのフォームの唯一の要素をドロップダウンさせる最初のドロップダウン

内部からのデータのみを送信するための最初のドロップダウンを入手できます。 aspで。net mvc asp.net mvcはwebformsのフォームマインドセットに従わないので、必要なだけ多くのフォームをページに含めることができます(それらを混用しない限り)。

また、ajax(jQueryを使用)を介してフィールドの値をコントローラに送信して、クライアント側で処理されるjsonを返すこともできます。 2番目のドロップダウンをpopoulateする方法です。最初のものが選択されると、コントローラのアクションにajaxリクエストが送信され、2番目のドロップダウンの内容がjsonとして返され、javascriptによって挿入されます。

asp.net mvcに簡単に移行する簡単なヒント:何かビュー関連(HTML、フォーム、JavaScriptなどを含む)はコントローラから独立しています。ビューはその(ビュー)モデルのみを気にしますが、コントローラーは受信したデータを気にします。コントローラは、通常はビューである結果を返しますが、何でもかまいません。コントローラは、ビューの詳細(html、js)について何も知らず、ビューデータ(ビューモデル)についてしか認識しません。

0

私はちょうど数年前にこの質問を思い出しました。もう1つの方法は、jQueryで$ .get(...)を使うことです(これは現在よく文書化されています...)