在ASP.NETMVC视图中显示来自SQL Server存储过程的数据

fruv7luv  于 2023-01-29  发布在  .NET
关注(0)|答案(2)|浏览(169)

我在SQL Server中执行的存储过程返回以下信息:

我展示了到目前为止我所做的工作。
型号

public class TarjetasInformativas
{
    public string PrimerNombre { get; set; }
    public decimal PrimerMonto { get; set; }
}

在其中建立到数据库的连接的类

public class DatosTarjetasInformativas
{
    public List<TarjetasInformativas> RetornarNombres()
    {
        List<TarjetasInformativas> objTarjetas = new List<TarjetasInformativas>();

        using(SqlConnection sqlConnection = new SqlConnection("Data Source=HN123; Initial Catalog=DBTEST; Integrated Security=True"))
        {
            string query = "SP_TARJETASINFORMATIVAS";

            SqlCommand cmd = new SqlCommand(query, sqlConnection);
            cmd.CommandType = CommandType.StoredProcedure;

            sqlConnection.Open();

            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    objTarjetas.Add(new TarjetasInformativas()
                    {
                        PrimerNombre = dr["ENTIDADES"].ToString(),
                        PrimerMonto = decimal.Parse(dr["MONTO"].ToString()),
                    });
                }
            }
        }

        return objTarjetas;
    }
}

主计长

public ActionResult ObtenerNombres()
{
    DatosTarjetasInformativas objDTTarjetas = new DatosTarjetasInformativas();

    List<TarjetasInformativas> objTarjetas = objDTTarjetas.RetornarNombres();

    return View(objTarjetas);
}

视图

@model WebPlantillaOpexLTE.Models.TarjetasInformativas
<div class="col-lg-3 col-6">
    <!-- small box -->
    <div class="small-box bg-info">
        <div class="inner">
            <h3>@Html.LabelFor(m => m.PrimerNombre)</h3>

            <p>@Html.LabelFor(m => m.PrimerMonto)</p>
        </div>
        <div class="icon">
            <i class="ion ion-android-locate"></i>
        </div>
    </div>
</div>

在视图的h3和p标记中,我希望从SQL Server存储过程中获取信息。

通过Html.LabelFor helper,我只能获取在模型中声明的变量,并且需要在卡中显示SQL Server存储过程的内容。
如果有疑问,在我的模型中,我通过断点与存储过程相关联,我已经验证了它接收到了信息。
我是这个平台的新手,我想知道我能做些什么来解决我的问题。
我提前感谢你花时间关注我的问题和帮助。

q8l4jmvw

q8l4jmvw1#

因此,在您的Razor视图中有几件事是错误的。
1.@model应该是List<WebPlantillaOpexLTE.Models.TarjetasInformativas>类型,因为这是SP函数的返回类型,并且模型返回到视图。
1.要显示列表的内容,应该使用foreach循环来迭代模型,如下所示(可能包含语法错误):

@model List<WebPlantillaOpexLTE.Models.TarjetasInformativas>
<div class="col-lg-3 col-6">

            @foreach(var item in @Model){
                <!-- small box -->
                <div class="small-box bg-info">                    
                        <div class="inner">
                            <h3>@item.PrimerNombre</h3>
                            <p>@item.PrimerMonto</p>
                        </div>
                        <div class="icon">
                            <i class="ion ion-android-locate"></i>
                        </div>                    
                </div>
            }

</div>

参考资料:https://learn.microsoft.com/en-us/aspnet/core/mvc/views/overview?view=aspnetcore-7.0

aamkag61

aamkag612#

我达到了要求,但是我对我的控制器做了一些修改,删除了我的类,我用实体框架做了这件事。
我显示我的控制器,在我的模型和视图没有任何变化,除了什么是纠正了第一个答案。

public ActionResult ListarTarjeta()
    {

        List<TarjetasInformativas> listaTarjetas = new List<TarjetasInformativas>();

        using (db)
        {
            var listTarjetasInformativas = db.SP_TARJETASINFORMATIVAS().ToList();

            foreach(var item in listTarjetasInformativas)
            {
                var asignar = new TarjetasInformativas
                {
                    PrimerNombre = item.NOMBRE,
                    PrimerMonto = (decimal)item.MONTO
                };

                listaTarjetas.Add(asignar);
            }
        }

        return View(listaTarjetas);
    }

相关问题