2013-09-24 78 views
2

我們有一個非常簡單的MVC表單,它具有一個獲取用戶所選城市的下拉列表。如何用非常簡單的查找來完成MVC表單?

我們有一個城市的名單,我們知道每個城市的平均氣溫(說)。

幾乎作爲裝飾(它不是核心功能)的形式,它會很好顯示選定城市的溫度,因爲用戶改變它。事情是這樣的:

enter image description here

這種情況發生客戶端,我猜。或者它是AJAX?

目前我們的表格大多是開箱即用的腳手架MVC4 EF自動生成的。

我們填充下拉列表,像這樣:

在控制器:

ViewData("Cities") = GetCitySelectList() 

,並在視圖:

@Html.DropDownListFor(Function(model) model.City, TryCast(ViewData("Cities"), SelectList)) 

...所以很簡單的東西。

有很多關於做級聯下拉的教程,這可能是我們在這裏試圖做的事情的矯枉過正。另外,如果你谷歌「JavaScript查找mvc窗體」或類似的很多結果綁你使用一個框架(敲除?準系統?),這再次,我不熟悉,我不知道我是否需要這樣一個簡單的任務。實際上,我們的目標是保持簡單,而且我們的城市列表非常短,幾乎可以在javascript中作爲一個巨大的if then else來實現(不過,我知道,yuk)。

這樣做最簡單的方法是什麼?

+1

使用jQuery控制器中的操作代碼,使Ajax調用獲取cityId傳遞的溫度並設置溫度'div或span'容器的html –

+1

@Murali在表單初始化時是否最好加載城市和溫度列表(以及其他屬性)? – hawbsl

+0

請檢查我的回答 –

回答

1

如下你可以這樣做:

  1. change on dropdown做一個Ajax call,然後將result在相應的div。

的HTML結果:

Temperature:<div id="temp"></div>

Ajax調用:

$("#dropdownId").change(function() { 
    $.ajax({ 
     type: "GET", 
     url: "Home/GetTemperature", // your url 
     contentType: "application/json; charset=utf-8", 
     data : {City : " + $(this).val() +"} 
     dataType: "json", 
     success: function (result) { 
      $("#temp").html(result); // place result in div 
     }, 
     error: function() { 
      alert("Error."); 
     } 
    }); 
}); 

你的行動(C#):

[HttpGet] 
public JsonResult GetTemperature(string City) 
{ 
    int temp = 30; // Get temp from your db.. 
    return Json(temp,JsonRequestBehavior.AllowGet); 
} 

你的動作(VB):

<HttpGet> 
Public Function GetTemperature(City As String) As JsonResult 
    Dim temp As integer = 30 
    Return Json(temp, JsonRequestBehavior.AllowGet) 
End Function 
1

您應該使用AJAX調用服務器的溫度。這可能是「最乾淨」的方式來實現你想要的形式。

+0

真的嗎?不應該將城市/溫度集合以某種方式急於加載到表單中嗎? – hawbsl

+0

@hawbsl,您可以通過我的回答查看有關負載情況 –

0

如果您試圖避免對服務器的不必要的請求,是的,您可以加載整個集合。您可以將數據保留在您在視圖上構建的隱藏<ul/>標記中。然後,當下拉選擇更改時,可以使用jQuery進行觸發。但是,不要進行AJAX調用,而是可以查找列表中的溫度,並將目標div的內容設置爲查找函數的返回值。

1

選項1:使用jQuery,並調用Ajax獲取的cityId一個溫度圖過去了,設定溫度圖股利或跨度容器的HTML

選項2:爲Javascript對象頁上的貪婪加載

您可能急於將城市和溫度加載到JSON對象中並存儲它。

下面是使用JSON.Net的JSON序列

public ActionResult myAction() 
{ 
MyViewModel model=new MyViewModel(); 
List<City> cities=new List<City>();//fill the city id, temp 
MyViewModel.CityJSON=JsonConvert.SerializeObject(List<City>); 

return View(model) 
} 

查看

@model MyViewModel 
// other controls 
@Html.HiddenFor(m=>m.CityJSON, new{@id='hdn-city-json'}) 

的JavaScript

var cityList=JSON.parse($('#hdn-city-json')); // returns array of city obj 
//do your stuff 
+0

+1感謝@Murali我會看看 – hawbsl