我的MVC(Razor)视图中有两个下拉列表:Country和State。 我可以填写下拉列表的相互独立。现在我想根据国家/地区下拉列表的更改事件填写第二个下拉列表(状态)。
为此,我在Controller中使用了JsonResult方法,对于这个方法,我从我的视图中传递Country的Change事件,以便填充我的第二个下拉状态。
问题陈述: JsonResult方法是从我的视图中触发的,但是CountryId值没有从视图传递到控制器以便填充状态。
我在这里做错了什么?
查看:
使用Javascript:
<script type="text/JavaScript">
function CountryChange() {
var url = '@Url.Content("~/MasterConfigGeneral/GetState")';
var ddlsource = "#CountryID";
var ddltarget = "#StateID";
if ($(ddlsource).val() != "") {
$.ajaxSetup({ cache: false });
$.getJSON(url, { countryID: $(ddlsource).val() }, function (data) {
$(ddltarget).empty();
$("#StateID").append("<option value=''>Select State</option>");
$.each(data, function (index, optionData) {
$("#StateID").append("<option value='" + optionData.Value + "'>" + optionData.Text + "</option>");
});
});
}
else {
$("#StateID").empty();
$("#StateID").append("<option value=''>Select State</option>");
}
}
</script>
我的视图中的下拉列表:
<div class="cssclass">
@Html.DropDownListFor(model => model.companyModel.CountryID, new SelectList(Model.ddlCountryStateCity.ddlCountry, "Value", "Text"), "Select Country", new { onchange="CountryChange()" })
@Html.ValidationMessageFor(model => model.companyModel.CountryID)
</div>
<div class="cssclass">
@Html.LabelFor(model => model.companyModel.StateID)
</div>
<div class="editor-field">
@Html.DropDownList("stateid",Model.ddlCountryStateCity.ddlState,"Select State")
@Html.ValidationMessageFor(model => model.companyModel.StateID)
</div>
控制器:
国家/地区下拉列表
#region Country
public DropdownListCountryStateCity FillDropDownListCountry()
{
objDropDownCountryStateCity.ddlCountry = (from s in dbEntity.Countries
select new SelectListItem()
{
Text = s.Name,
Value = s.CountryID
}).ToList<SelectListItem>();
return objDropDownCountryStateCity;
}
#endregion
州下拉列表:
#region State
public JsonResult GetState(string countryID)
{
JsonResult jsResult = new JsonResult();
objDropDownCountryStateCity.ddlState = (from csc in dbEntity.CountryStateCities
join c in dbEntity.Countries on csc.CountryID equals c.CountryID
join s in dbEntity.States on csc.StateID equals s.StateID
where csc.CountryID == countryID
select new SelectListItem()
{
Text = s.Name,
Value = s.StateID
}).ToList<SelectListItem>();
jsResult.Data = objDropDownCountryStateCity.ddlState;
jsResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return jsResult;
}
#endregion
答案 0 :(得分:0)
你的问题在于DropDownListFor助手如何生成元素。
在你的代码中,它会产生这样的名称和ID:
<select id="companyModel_CountryID" name="companyModel.CountryID">
...
</select>
在你的javascript中,ddlSouce是“#CountryID”。由于没有带有该id的元素,jQuery将null作为数据传递给$ .getJSON。这就是控制器方法什么也得不到的原因。
您有两种选择:
new { onchange="CountryChange()" }
到
new { id = "CountryID", onchange="CountryChange()" }
恕我直言,最后一个选择是最好的选择。