【问题标题】:Retrieve model with JavaScript使用 JavaScript 检索模型
【发布时间】:2020-03-04 19:05:40
【问题描述】:

我正在将数据返回到模型,然后我用 JS 恢复它,但我看到它们是 Null,我添加了我的代码来恢复数据和发送它的位置

C#

[HttpPost]
    public JsonResult AjaxMethod(string type, int value)
    {
        CascadingModelGastos model = new CascadingModelGastos();
        switch (type)
        {
            case "ProyectoID":
                model.Recurso = PopulateDropDown("SELECT Id, Descripcion FROM [dbo].[Cat_Cuenta_Recurso] ", "Descripcion", "Id");
                break;
            case "RecursoID":
                model.SubRecurso = PopulateDropDown("SELECT Id, DescripcionSubRecurso FROM [dbo].[Cat_Cuenta_SubRecurso] WHERE Id_Cuenta_Recurso = " + value, "DescripcionSubRecurso", "Id");
                break;
            case "SubRecursoID":
                model.TipoPago = PopulateDropDown("SELECT ID, DescripcionTipoPago FROM[dbo].[Cat_TipoPago] WHERE ESTATUS = 'A'", "DescripcionTipoPago", "Id");
                DataSet Tabla = new DataSet();
                Tabla = BLL.BLL.Negocio.ConaultaImporte(value);
                model.Programado = "$" + Tabla.Tables[0].Rows[0]["TotalProgramadoMensual"].ToString();
                break;
        }
        return Json(model);
    }

返回null的数据是: model.Programado = "$" + Tabla.Tables[0].Rows[0]["TotalProgramadoMensual"].ToString();

所以我调用了方法:

$("select").change(function () {

        var value = 0;
        if ($(this).val() != "") {
            value = $(this).val();
        }
        var id = $(this).attr("id");
        $.ajax({
            type: "POST",
            url: "../AjaxMethod",
            data: '{type: "' + id + '", value: ' + value + '}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                var dropDownId;
                var list;
                switch (id) {
                    case "ProyectoID":
                        list = response.Recurso;
                        DisableDropDown("#RecursoID");
                        DisableDropDown("#SubRecursoID");
                        PopulateDropDown("#RecursoID", list);

                        break;
                    case "RecursoID":
                        dropDownId = "#SubRecursoID";
                        list = response.SubRecurso;
                        DisableDropDown("#SubRecursoID");
                        PopulateDropDown("#SubRecursoID", list);

                        break;
                    case "SubRecursoID":
                        dropDownId = "#TipoPagoID";
                        list = response.TipoPago;
                        DisableDropDown("#TipoPagoID");
                        PopulateDropDown("#TipoPagoID", list);
                        break;
                }

            },
            failure: function (response) {
                alert(response.responseText);
            },
            error: function (response) {
                alert(response.responseText);
            }
        });
        var models = @Html.Raw(Json.Encode(Model));
        document.getElementById("Programado").value = models.Programado;
    });
});

所以我尝试恢复我的模型数据: var models = @Html.Raw(Json.Encode(Model));

最后一个问题是:什么时候可以恢复我的模型数据???

【问题讨论】:

  • 您需要继续兑现.ajax 回报的承诺。原始调用由服务器执行。

标签: javascript c# jquery model-view-controller


【解决方案1】:

你不能使用@Html.Raw()。相反,使用下面的代码。为了解释有什么不同,@Html.Raw() 在您的 Web 服务器通过 View 服务请求时运行。但是,在您的情况下,您通过向服务器发送请求的 ajax() 加载数据,然后服务器为请求提供服务并发回 JSON(不是视图),因此您视图中的 @Html.Raw() 从未执行.

$("select").change(function () {

        var value = 0;
        if ($(this).val() != "") {
            value = $(this).val();
        }
        var id = $(this).attr("id");
        $.ajax({
            type: "POST",
            url: "../AjaxMethod",
            data: '{type: "' + id + '", value: ' + value + '}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                var dropDownId;
                var list;
                switch (id) {
                    case "ProyectoID":
                        list = response.Recurso;
                        DisableDropDown("#RecursoID");
                        DisableDropDown("#SubRecursoID");
                        PopulateDropDown("#RecursoID", list);

                        break;
                    case "RecursoID":
                        dropDownId = "#SubRecursoID";
                        list = response.SubRecurso;
                        DisableDropDown("#SubRecursoID");
                        PopulateDropDown("#SubRecursoID", list);

                        break;
                    case "SubRecursoID":
                        dropDownId = "#TipoPagoID";
                        list = response.TipoPago;
                        DisableDropDown("#TipoPagoID");
                        PopulateDropDown("#TipoPagoID", list);
                        break;
                }
                // TRY THIS ONE
                document.getElementById("Programado").value = response.Programado;

            },
            failure: function (response) {
                alert(response.responseText);
            },
            error: function (response) {
                alert(response.responseText);
            }
        });
    });
});

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多