0

フォームでAsp.NetMVC4を使用しています。カスケードにドロップダウンリストがあります。別の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の値は「TJA」です。テキストは「TARIJA」です。コンポーネントのテキストがexecute$('#ddlParDistrito')。trigger('change');であることをよく示しています。ドロップダウンリスト「Sucursal」のこのロードデータですが、現在の値は設定されていません。このshowme「-SUCURSAL-」では、現在の値は「YCB」で、テキストは「YACUIBA」です。この問題を解決してください。

よろしくリカルド

私の見解では、このドロップダウンリストがあります。「SUCURSAL」には、新しい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 に答える