繁体   English   中英

我没有从 ASP.NET MVC 中的控制器获取值

[英]I am not getting values from controller in ASP.NET MVC

我正在使用 Entity Framework 6.0 在 ASP.NET MVC 5 中编写一个应用程序,该应用程序基于选定的日期,将此日期发送到控制器,该控制器将其传递给存储过程,此过程基于该日期,计算people 并将值返回给控制器,并且“应该”应该将其传递回 ajax,以便使用 JavaScript 可以处理它并在视图中显示结果; 代码如下:

$("#FechConsult").change('click', function () {
        $.ajax({
            type: 'POST',
            dataType: 'Json',
            url: "/Home/CuentaUser",
            data: { FechaInsc: $("#FechConsult").val() },
            success: function (data) {
                var CantidadUsr = result[0];
                $("#TotCupos").val(CantidadUsr.CantiPer);
                cupos = ParseInt(CantidadUsr.CantiPer - TotalUsr);
                if ((cupos >= 15) || (cupos <= 20)) {
                    $("#TotCupos").css({ "background": "#b5ff33" });
                }
                else {
                    if ((cupos >= 10) || (cupos <= 14)) {
                        $("#TotCupos").css({ "background": "#e9f00e" });
                    }
                    else {
                        if ((cupos >= 1) || (cupos <= 9)) {
                            $("#TotCupos").css({ "background": "#e85e0a" });
                            $("#mensaje").show();
                            $("#mensaje").val("Ha Llegado Casi Al Limite de Cupos Diarios");
                        }
                        else {
                            if ((cupos = TotalUsr)) {
                                $("#mensaje").show();
                                $("#mensaje").val("Ha Llegado A Límite Máximo de Personas, Seleccione Otro Dia");
                                $("#PassWord").focus();
                            }
                        }
                    }
                }
            }
        })
    });

然后这发生在控制器上:

[HttpPost]
    public ActionResult CuentaUser(Inscripcion inscripcion)
        {
            using (CtaUsr = new Drillco_InscripcionEntities())
            {
                var CantiPer =  CtaUsr.SP_Sel_Cta_PersXFecha(Convert.ToString(inscripcion.FechaInsc));
                return Json(CantiPer, JsonRequestBehavior.AllowGet);
            }
        }

存储过程如下:

ALTER procedure [dbo].[SP_Sel_Cta_PersXFecha]
    @FechInsc varchar(10)
AS
BEGIN
    SELECT COUNT(idOper) AS CantP
    FROM Inscripcion
    WHERE FechaInsc = CONVERT(datetime, @FechInsc, 103)
END

问题是:调用存储过程后,ajax没有接收到控制器返回的值,在浏览器中按F12,提示出现500错误,无法识别控制器名称,我已经转了一千圈了,我还没有找到任何解决方案,有人能告诉我我做错了吗?

一件事,您的 ajax 调用正在传递FechaInsc: $("#FechConsult").val()但您的存储过程需要一个名为 'inscripcion` 的参数。 这些名称和类型应该匹配。 从看起来您的 Ajax 调用正在为对象的更新的“铭文”发送一个字符串,但服务器端代码期望返回一个实体。

它可能应该更像:

public ActionResult CuentaUser(string fechaInsc)
{
    using (CtaUsr = new Drillco_InscripcionEntities())
    {
        var CantiPer =  CtaUsr.SP_Sel_Cta_PersXFecha(fechaInsc);
        return Json(CantiPer, JsonRequestBehavior.AllowGet);
    }
}

但是,如果该存储过程正在更新特定记录上的值,我不知道它将如何知道要更新哪一行。 通常对于 Update 方法,您会传递足够的数据来标识要更新的行,以及值:

public ActionResult CuentaUser(int inscriptionId, string fechaInsc)

或者包含要更新的 ID 和数据的数据容器(POCO ViewModel 或 DTO,不是实体)。

值得注意的是,使用实体框架的全部意义在于取代对与数据层对话的担忧。 定义实体,配置 EF 以将这些关系映射到相应的表,并让 EF 管理 SQL 语句的生成和执行。 如果打算编写存储过程来处理更新和选择,那么最好只使用 ADO.Net。

使用 EF,更新方法看起来更像是:

public ActionResult CuentaUser(int inscripcionId, string fechaInsc)
{
    using (context = new DrillcoDbContext())
    {
        var inscripcion = context.Inscripcions.Single(x => x.InscripcionId == inscripcionId);
        inscripcion.FechaInsc = fechaInsc;
        context.SaveChanges();
        return Json(inscripcion, JsonRequestBehavior.AllowGet);
    }
}

这是对您的应用程序将使用的对象进行大量猜测。 然而,根本的区别在于传递要更新的实体的 ID 以及更新的值,使用DbContext通过 ID 获取该实体,更新值,并在DbContext上调用SaveChanges 且仅当这些值实际发生更改,EF 才会为已更改的值构建所需的 SQL。 无需编写/调用存储过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM