MVC 4 Razor中的级联下拉列表

时间:2014-07-31 11:32:35

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor razor-2

我有3个表国家,州,城市。

我像往常一样想要级联下拉列表。

如果不使用LINQ,我该怎么做呢。

我不知道如何开始。我想用RAZOR做到这一点。如果是在JQUERY或JSON中,也没关系。

如何开始。

提前致谢。

我可以使用存储过程吗?

表格是: -

用户:

名 cityid

国家:

id stateid name

stateid cityid名称

城市

cityid名称。

我没有尝试过,因为我不知道从哪里开始。

3 个答案:

答案 0 :(得分:2)

创建级联选择的一般方法

创建包含要显示的属性的视图模型,包括国家/地区ID的属性和国家/地区选项的SelectList

在您的视图中,渲染选择使用@HtmlDropDownFor()作为国家,国家和地产ID(国家/地区选择将被填充;其他将为空)

使用jQuery,在Country change事件中,对一个action方法使用AJAX调用,该方法根据所选的Country返回一个States列表(返回html以替换City select,或返回JSON以创建一组新的选项元素。

选择状态时重复上述步骤(填充城市选择)

答案 1 :(得分:0)

这里没有人会为您提供完整的代码,就像您在问题中提出的那样,但下拉的使用情况如下所示:

在MVC中进行下拉列表的基本和最简洁的方法如下:

型号:

public List<SelectListItem> ItemTypes { get; set; }
public int ItemVal { get; set; }


In your [HttpGet] Controller just bind `Model.ItemTypes` with values

查看:

@Html.DropDownListFor(m => m.ItemVal , new SelectList(Model.ItemTypes , "Value", "Text"), "  -----Select List-----  ")

这里是上面的例子DropDownListFor()的第三个重载,即&#34; -----Select List-----&#34;将是您的下拉列表的初始选定项目,其值等于&#39; &#39;

在POST期间,在ItemVal中,ItemVal将选择下拉值。

上面显示的代码是在MVC中绑定Dropdownlist的最佳和最简单的方法。

答案 2 :(得分:0)

见这个例子。你会有一个想法。我只是展示未经测试的样品。

    public ActionResult Index()
    {
        var countries = new List<string> { "USA", "India" };

        ViewBag.Countries = new SelectList(countries);

        return View();
    }

    public ActionResult GetStates(string country)
    {
        //perform filter here based on country
        return Json(new[] {
            new { Id = 1, Value = "State 1" },
            new { Id = 2, Value = "State 2" },
            new { Id = 3, Value = "State 3" },
        }, JsonRequestBehavior.AllowGet);
    }

查看页面

<div>Select country:</div>
<div>@Html.DropDownList("country",
                            ViewBag.Countries as SelectList,
                            "Please select",
                            new { id = "country" })
</div>
<div>Select state:</div>
<div>
    <select id="state"></select>
</div>

在国家/地区选择中,执行ajax调用并获取相关状态。

<script type="text/javascript">
    $(function () {
        $('#country').on('change', function () {
            $.getJSON('@Url.Action("GetStates")', function (result) {
                var ddl = $('#state');
                ddl.empty();
                $(result).each(function () {
                    $(document.createElement('option'))
                        .attr('value', this.Id)
                        .text(this.Value)
                        .appendTo(ddl);
                });
            });
        });
    })
</script>