0

我在表单中使用 Asp.Net MVC4 我在级联中有下拉列表,当我在另一个 DropDownList 中选择“Distrito”时,会加载“Sucursal”的值,这可以正常工作我可以插入一条记录我的问题是当我需要搜索检索数据的项目未设置正确的值。这是控制器中的代码:

public JsonResult Buscar(string id){
        string Mensaje = "";
        Models.cSinDenuncias oDenuncia = new Models.cSinDenuncias();
        oDenuncia.sd_iddenuncia = id;
        var denuncia = Servicio.RecuperaDenuncia<Models.cSinDenuncias>(ref Mensaje, oDenuncia.getPk(), oDenuncia);
        string HoraDenuncia = denuncia.sd_horadenuncia.ToString();
        return Json(new {objDenuncia = denuncia, hDenuncia = HoraDenuncia});
    }

在 objDenuncia 我有值例如值 objDenuncia.sd_pardistrito = "TJA" objDenuncia.sd_sucursal = "YCB"

当我发现这是我在视图中的代码时:

function Buscar() {
        var Iddenuncia = $('#sd_iddenuncia').val();
        $.ajax({
            url: '@Url.Action("Buscar", "raDenuncia")',
            type: 'POST',
            data: { Id: Iddenuncia },
            dataType: 'json',
            success: function (data) {                    
                $('#sd_iddenuncia').val(data.objDenuncia.sd_iddenuncia);
                $('#ddlParDistrito').val(data.objDenuncia.sd_pardistrito);
                $('#ddlParDistrito').trigger('change');
                $('#ddlSucursal').trigger('change');
                $('#ddlSucursal').val();                    
                $('#ddlSucursal').val(data.objDenuncia.sd_sucursal);                    
                $("select#ddlSucursal").val(data.objDenuncia.sd_sucursal);                  
            }
        });
    }

下拉列表中的值 ddlParDistrito is "TJA" text is "TARIJA" 很好地显示了组件中的文本 execute $('#ddlParDistrito').trigger('change'); 此下拉列表“Sucursal”的加载数据但未设置当前值,此显示“--SUCURSAL--”此处当前值应为“YCB”,文本为“YACUIBA”,请帮助我解决这个问题。

问候里卡多

在我看来,我有这个下拉列表,对于“SUCURSAL”,我使用 new SelectList(Enumerable.Empty()

 <td class="name"><label>Distrito:</label></td>
 <td class="name">@Html.DropDownListFor(u => u.sd_pardistrito, new SelectList(ViewBag.Distrito as System.Collections.IEnumerable, "cp_idparametro", "cp_descparametro"), "-- DISTRITO --", new { id = "ddlParDistrito", style = "width:125px;" })</td>
 <td class="name"><label>Sucursal:</label></td>
 <td class="name">@Html.DropDownListFor(u => u.sd_sucursal, new SelectList(Enumerable.Empty<SelectListItem>(), "cp_idparametro", "cp_descparametro"), "-- SUCURSAL --", new { id = "ddlSucursal", style = "width:125px;" })</td>

在我的控制器中,我使用此方法在“DISTRITO”中更改选项时加载下拉列表

[AcceptVerbs(HttpVerbs.Get)]
    public JsonResult LoadSucusalByDistrito(string id)
    {
        var sucursalList = this.GetSucursal(id);
        var sucursalData = sucursalList.Select(m => new SelectListItem()
        {
            Text = m.cp_descparametro,
            Value = m.cp_idparametro,
        });
        return Json(sucursalData, JsonRequestBehavior.AllowGet);
    }

在我看来,当更改选项 ddlDistrito 加载 ddlSucursal

$("#ddlParDistrito").change(function () {
            var idDistrito = $(this).val();
            $.getJSON("/raDenuncia/LoadSucusalByDistrito", { id: idDistrito },
                function (distritoData) {
                    var select = $("#ddlSucursal");
                    select.empty();
                    select.append($('<option/>', {
                        value: 0,
                        text: "-- SUCURSAL --"
                    }));
                    $.each(distritoData, function (index, itemData) {
                        select.append($('<option/>', {
                            value: itemData.Value,
                            text: itemData.Text
                        }));
                    });
                });
        });
4

1 回答 1

0

在问题下方的评论回复中,我没有清楚地理解您的陈述。

我将尝试解释我认为可能存在的问题,如果我正在做某事,您可以告诉我,当$('#ddlSucursal').val(data.objDenuncia.sd_sucursal);执行语句时,我认为下拉菜单ddlSucursal没有数据。有没有办法让你在函数内移动该语句$("#ddlParDistrito").change...,以便它在你完成后执行。

因此,如果您可以尝试以下操作,则效果如下:

var currentSucursal = null;
function Buscar() {
    var Iddenuncia = $('#sd_iddenuncia').val();
    $.ajax({
        url: '@Url.Action("Buscar", "raDenuncia")',
        type: 'POST',
        data: { Id: Iddenuncia },
        dataType: 'json',
        success: function (data) {                    
            $('#sd_iddenuncia').val(data.objDenuncia.sd_iddenuncia);
            $('#ddlParDistrito').val(data.objDenuncia.sd_pardistrito);

            // Set the global variable to the currently given sucursal value
            currentSucursal = data.objDenuncia.sd_sucursal;

            // Call the change event after the global values is set
            $('#ddlParDistrito').trigger('change');
            // $('#ddlSucursal').trigger('change');
        }
    });
}

进而

$("#ddlParDistrito").change(function () {
    var idDistrito = $(this).val();
    $.getJSON("/raDenuncia/LoadSucusalByDistrito", { id: idDistrito },
        function (distritoData) {
            var select = $("#ddlSucursal");
            select.empty();
            select.append($('<option/>', {
                value: 0,
                text: "-- SUCURSAL --"
            }));
            $.each(distritoData, function (index, itemData) {
                select.append($('<option/>', {
                    value: itemData.Value,
                    text: itemData.Text
                }));
            });

            // Check if the global variable has value
            if(null!==currentSucursal) {
                $('#ddlSucursal').val(currentSucursal);
            }
        });
});

我希望我的内联评论是不言自明的。

于 2013-01-30T11:17:14.120 回答