如何从Viewpage的下拉列表中获取值并将其传递给MVC中的控制器

时间:2018-06-06 07:17:04

标签: c# html asp.net-mvc drop-down-menu

我正在创建一个级联下拉列表,其中一个是州,另一个是城市。 当用户选择状态时,我存储该状态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>

2 个答案:

答案 0 :(得分: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);
    }
}

请告诉我这是否有帮助!

答案 1 :(得分:0)

有很多方法可以做到这一点,如果你使用ajax,你可以这样做=&gt;

function CallChangefunc(val)
    {
       $.ajax({
        url: http://localhost/Controller/ViewCitybyState,//Your route Here
        type: 'GET',
        data: { 
                id: val,                    
              },
        success: function () {
        },
        error: function () {                
        }
    });
    }