我正在创建一个级联下拉列表,其中一个是州,另一个是城市。 当用户选择状态时,我存储该状态ID,然后我想填充对应于该状态的城市名称。我已经使用ViewBag来填充State并希望对City执行相同操作但不知道如何将State id从View页面传递给Controller。 我的控制器代码:
public ActionResult ViewCitybyState(int? id)
{
List<string> a = null;
if (id != null)
{
a = objmodel.ViewCitybyID(id).ToList();
}
ViewBag.Cities = a;
return View(a);
}
这里id我想要的是状态id,当用户选择我知道我们需要使用onchange命令的状态时我应该得到它
我的viewPage
@Html.DropDownListFor(m => m.States,new SelectList(ViewBag.State,"Stateid", "States"),new {@id="ddlstates", @onchange = "CallChangefunc(this.value)" })
如何将值传递给控制器?
function CallChangefunc(val)
{
?? // Not sure how and what to write here
}
</script>
答案 0 :(得分:0)
有很多方法可以做到这一点,如果你使用ajax,你可以这样做=&gt;
function CallChangefunc(val)
{
$.ajax({
url: http://localhost/Controller/ViewCitybyState,//Your route Here
type: 'GET',
data: {
id: val,
},
success: function () {
},
error: function () {
}
});
}
答案 1 :(得分:0)
<强>第一强>
将控制器操作更改为:
public JsonResult ViewCitybyState(string id)
<强>第二强>
在您的视图页面中,创建服务器操作的网址并使用$.getJSON
,如下所示:
// put your city dropdownlist into a variable
var cityDdl = $("#CityDropDownList");
// whatever variable you're storing the state value in
var stateIdValue = $("#StateDropDownList).val();
var submitUrl = '@Url.Action("ViewCitybyState", "ControllerName")';
$("#StateDropDownList").change(function() {
$.getJSON(submitUrl,
{ id: stateIdValue },
function (response) {
console.log(response);
cityDdl.empty();
cityDdl.append($('<option></option>').val('').text('-- Select City --'));
if (response.length !== 0) {
$.each(response,
function(index, item) {
cityDdl.append($("<option></option>").val(item.Value).text(item.Text));
});
}
});
});
<强>第三强>
编辑您的控制器操作:
public ActionResult ViewCitybyState(string id)
{
int ddValue;
bool isNumber = int.TryParse(id, out ddValue);
if(isNumber)
{
// _context is an assumption of what your connection string is
// Cities is an assumption of the table you're using to hold the city names
var cities = _context.Cities.Where(x => x.StateId == ddValue).Select(x => new { Text = x.CityName, Value = x.Id }).ToList();
return Json(cities, JsonRequestBehavior.AllowGet);
}
}
请告诉我这是否有帮助!