具有Java脚本的DropDownList

时间:2018-07-25 19:01:34

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

我希望开发人员能够支持我,我对Java脚本的使用经验很少。

经过调查和多次尝试,我能够使用LINQ查询中的数据加载下拉列表,并将文本框的值作为参数传递。

我不能从查询Linq中获取两个字段(Id和值),将它们发送到dropdownlist并显示值,但是在能够使用该字段的ID之后才能在创建中使用它,目前我只能显示该值,但我也需要ID。

查看

@Html.TextBox("CP", "", new { @id = "txtCP", @onchange = "FillOption();", @placeholder = "Codigo Postal" })
@Html.DropDownList("Asentamientos", ViewBag.Drop as List<SelectListItem>)

脚本

<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>

控制器

 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);
        }

我想到了类似的东西

 [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和值将如何处理

谢谢

3 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,我认为您需要使用Linq表达式来命名要创建的对象的字段,这样看起来就像这样:

let invoice = XMLMapper<Invoice>().map(XMLString: xmlString)
print(invoice?.cbcID ?? "nil") // access cbc:ID for example 

以下是一些示例:https://code.msdn.microsoft.com/LINQ-to-DataSets-09787825#SelectAnonymousTypes1

然后,您可以使用[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); } data[i].id从JavaScript中访问这些字段。 我希望这会有所帮助。

答案 1 :(得分:2)

我怀疑您的问题与从API结果中提取数据有关。您正在ViewBag中设置一个新属性,然后返回ViewBag属性。确实不需要这样做,而应该返回列表,这样列出来(请注意:SelectItemList具有一个名为“ Items”的属性,其中包含您添加的所有项目):

 [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属性,就像这样:

<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 :(得分:0)

感谢所有人,代码的工作方式如下

控制器

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

脚本

<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 > ');
            }
        }
    });
}