確定首。所有渲染狀態(我假設你已經提供了你的視圖模型的狀態列表):
<select id="stateList">
<option value="0">-------- select state ------ </option>
@foreach(var state in Model.States)
{
<option value="@state.Id">
@state.Name
</option>
}
</select>
<div id="cityContainer">
</div>
<input type="button" id="submitChanges">
通過處理更改事件讓城市的名單:
$("#stateList").change(function(){
var id = $("option:selected",$(this)).attr("Id");
$.ajax({
url:'@Url.Action("getStateCities","YourController")'
data = {stateId = id},
success:function(data){
$.each(cities, function() {
var $cityList = $("#cityContainer");
var $checkbox= $("<input type='checkbox'></input>").attr("value",this.Id).text(this.CityName);
if (this.isInState)
{
$checkbox.attr("checke","checked");
}
$checkbox.appendTo($cityList);
});
}
})
});
和找你控制器動作可以是這個樣子:
public JsonResult getStateCities(int stateId)
{
var data = _addressService.GetStateCities(Id).Select(c => new { c.CityName, c.Id , isInState = isCityInEstate(cityId)});
return new JsonResult { Data = data };
}
實施GetStateCities
和isCityInEstate
是由你。將表單數據發送回控制器:
$("#submitChanges").click(function(){
var citiesToSubmit = [];
$("input[type=checkbox]",$("#cityContainer")).each(function(){
var include = $(this).prop('checked'),
cityId = $(this).attr("Id");
citiesToSubmit.push({CityId:cityId, Include : include});
});
$.ajax({
url:'@Url.Action("SubmitCities","YourController")',
data :{StateId = $("#estateList").attr("Id") , Cities : citiesToSubmit}
success:function(){
alert('cities submitted');
}
});
});
終於控制器:
public class SubmitedCityViewModel
{
public int StateId {get;set;}
public List<CityViewModel> Cities {get;set;}
}
public class CityViewModel
{
public int cityId {get;set;}
public bool Include {get;set;}
}
public JsonResult SubmitCities(SubmitedCityViewModel model){
foreach(var city in model.Cities)
{
if (city.Inclue)
{
//update db to include
_addressService.AddCityToState(city.Id,model.StateId);
}
else
{
//update db to remove
_addressService.RemoveCityFromState(city.Id,model.StateId);
}
}
}
爲它創建一個新的網絡控制。在Web控制中處理複選框(所有城市)的顯示。我很抱歉,您需要爲我們提供一些代碼,以便給您一個答案。 –
您是否計劃通過ajax調用或全部回發來獲取狀態的城市? –
@BehnamEsmaili,AJAX電話會很好。 – Yustme