首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用java脚本的DropDownList

使用java脚本的DropDownList
EN

Stack Overflow用户
提问于 2018-07-26 03:01:34
回答 2查看 85关注 0票数 1

我希望开发人员能支持我,我在使用java脚本方面的经验很少。

经过研究和多次尝试,我能够加载一个包含来自LINQ查询的数据的下拉列表,并将textbox的值作为参数传递。

我不能做的是从查询Linq获取两个字段(Id和value),将它们发送到下拉列表并显示值,但是在能够使用该字段的Id以便能够在create中使用它之后,目前我只能显示值,但我也需要Id。

视图

代码语言:javascript
复制
@Html.TextBox("CP", "", new { @id = "txtCP", @onchange = "FillOption();", @placeholder = "Codigo Postal" })
@Html.DropDownList("Asentamientos", ViewBag.Drop as List<SelectListItem>)

脚本

代码语言:javascript
复制
<script>
    function FillOption() {
        var CP = $('#txtCP').val();
        $.ajax({
            type: "Post",
            url: "/Home/GetAsentamiento",
            data: { CP: CP },
            dataType: 'json',
            success: function (data) {
                $("#Asentamientos").empty();
                for (var i = 0; i < data.length; i++) {
                    $('#Asentamientos').append('<option value=' + data[i].Value + '>' + data[i].Text + '</option > ');
                }
            }
        });
    }
</script>

控制器

代码语言:javascript
复制
 public ActionResult Index()
        {
            List<SelectListItem> drop = new List<SelectListItem>
            {
            };
            ViewBag.Drop = drop;
            return View();

        }

        [HttpPost]
        public ActionResult GetAsentamiento(string CP)
        {
            var drop2 = (from p in db.CodigosPostales where p.CodigoPostal == CP select p.Asentamiento).ToList();
            SelectList lista = new SelectList(drop2);
            ViewBag.lista = lista;
            return Json(ViewBag.lista);
        }

我想像这样的东西

代码语言:javascript
复制
 [HttpPost]
        public ActionResult GetAsentamiento(string CP)
        {
            var drop2 = (from p in db.CodigosPostales where p.CodigoPostal == CP select new { p.IdCodigoPostal,p.Asentamiento}).ToList();
            SelectList lista = new SelectList(drop2);
            ViewBag.lista = lista;
            return Json(ViewBag.lista);
        }

但是我不知道如何处理id和值。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-07-26 03:30:13

如果我理解正确的话,我认为您需要使用Linq表达式命名正在创建的对象的字段,以便它看起来如下所示:

代码语言:javascript
复制
[HttpPost]
    public ActionResult GetAsentamiento(string CP)
    {
        var drop2 = (from p in db.CodigosPostales where p.CodigoPostal == CP select new { id = p.IdCodigoPostal, value = p.Asentamiento}).ToList();
        SelectList lista = new SelectList(drop2);
        ViewBag.lista = lista;
        return Json(ViewBag.lista);
    }

这里有几个例子:https://code.msdn.microsoft.com/LINQ-to-DataSets-09787825#SelectAnonymousTypes1

然后,您可以使用data[i].iddata[i].value从javascript访问这些字段。我希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2018-07-26 03:51:05

我怀疑您的问题是从API结果中提取数据。您在ViewBag中设置了一个新属性,然后返回ViewBag属性。这真的不应该是必需的,你应该返回你的list,list so (注意: SelectItemList有一个名为" items“的属性,它包含了你添加的所有项目):

代码语言:javascript
复制
 [HttpPost]
        public ActionResult GetAsentamiento(string CP)
        {
            var drop2 = (from p in db.CodigosPostales where p.CodigoPostal == CP select new { p.IdCodigoPostal,p.Asentamiento}).ToList();
            SelectList lista = new SelectList(drop2);
            return Json(lista.Items);
        }

这应该只返回一个很好的ListItems列表。您也可以将jQuery更改为遍历items属性,如下所示:

代码语言:javascript
复制
<script>
    function FillOption() {
        var CP = $('#txtCP').val();
        $.ajax({
            type: "Post",
            url: "/Home/GetAsentamiento",
            data: { CP: CP },
            dataType: 'json',
            success: function (data) {
                $("#Asentamientos").empty();
                for (var i = 0; i < data.Items.length; i++) {
                    $('#Asentamientos').append('<option value=' + data.Items[i].Value + '>' + data.Items[i].Text + '</option > ');
                }
            }
        });
    }
</script>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51525958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档