2012-03-01 39 views
2

我深諳ASP.NET的WebForms,並正在考慮我的代碼轉換爲MVC 3混淆MVC以及如何處理形式

我學習MVC,並在它有一定的瞭解,但是,還有一個問題我還沒有明白。

它是這樣的:

隨着WebForms的代碼,我能有一個DropDownList,選擇時,會一直觸發通過JavaScript一鍵操作,而該按鈕會一直觸發方式要能已經填充了另一個DropDown,但是兩個DropDown都是同一個窗體的一部分,並且用戶可見的實際Button(並且要由用戶手動按下)會觸發一個Method,該窗口從這些DropDown中獲取值以及其他領域。

事情是,我不知道如何用MVC做到這一點。根據我目前的理解,如果我想將表單數據發送到應用程序,它必須遵循一個模型。這是什麼讓我很困惑(從我目前的理解),我怎麼得到第一個DropDown發送只有從第一個DropDown的數據?另外填充另一個下拉列表也是MVC的一個模糊想法,但特別是關於第一個DropDown的觀點是讓我最困惑的一點。

如果任何人都可以以任何方式幫助我,這將不勝感激。

+1

在MVC中這種東西需要由你寫:)在你的情況下,對於下拉列表中,你需要一個javascript的onchange()事件,它會做一些AJAX級聯其他下拉菜單 – 2012-03-01 13:00:22

回答

3

讓你的頭在這裏的最大區別在於ASP.NET MVC中沒有舊式回發。

在這種情況下,您可以控制如何爲下拉框獲取新數據。

當表單完成並且我們準備將數據發送到服務器時,我們會將它作爲特定類型發回給我們的控制器方法,但在此之前,我們可以訪問我們需要的數據任何其他控制器方法。

就我個人而言,我會使用jQuery使用ajax請求來執行此操作,以返回JsonResult類型的控制器方法。

是這樣的:

$.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。第一個嘗試模仿桌面表單應用程序和abstracs(隱藏)web平臺的詳細信息。 Asp.net mvc雖然是一個基於MVC的框架,但它實際上是一個'真正'的web框架,因爲它不會試圖隱藏任何與你相關的web。這就是說,瀏覽器提交的數據實際上是'數據來更新模型'而不是模型本身。在大多數教程中,您將看到發回的視圖模型(或視圖模型的一部分),但它只是瀏覽器提交的數據。對於asp.net mvc應用程序中的模型存在很多混淆。

我怎麼得到的第一個下拉列表,從第一個下拉

你作出這樣的下拉列表中選擇窗體的唯一元素中只發送數據。在asp中。net mvc你可以在頁面中看到儘可能多的表單(只要你不要混合它們),asp.net mvc就不會遵循webforms的表單思想。

或者,您可以通過ajax(使用jQuery)將字段的值提交給控制器,該控制器返回將在客戶端處理的json。也許這就是你彈出第二個下拉列表的方法,當選擇第一個下拉列表時,ajax請求被髮送到控制器的一個動作,它將第二個下拉列表的內容作爲json返回,然後通過javascript插入。

一個簡單的提示,讓你過渡更容易的asp.net mvc:任何視圖相關(HTML - 包括窗體,JavaScript等)是獨立於控制器。該視圖只關心其(視圖)模型,控制器關心它接收的數據。控制器返回一個通常是視圖的結果,但可能是任何東西。控制器對視圖細節(html,js)一無所知,它只知道視圖數據(視圖模型)。

0

我剛剛想起了幾年前我問過的這個問題。另一種方式是使用$ .get(...)和jQuery(現在已經有很好的文檔了...)