首页 > 解决方案 > 有没有什么方法可以让 Controller、ViewModel 和 View 没有 Model?仅用于索引视图

问题描述

我想做的是一个参数化的报告,我很想为此使用 SSRS 或其他花哨的工具,但此时它有点危险,因为我真的不想搞乱公司服务器而且我没有太多时间; 此外,如果它是一个工具,它应该是一个免费且轻便的工具,我现在还没有找到。

所以,我的想法是制作一个带有索引的简单控制器,它将根据参数返回一个列表到视图,视图将使用该 ViewModel 作为模型,然后用户可以将该列表导出为 CSV 或 PDF,问题是:MVC 要求一个真正的db模型来完成脚手架,那该怎么做呢?

控制器(我在这里调用存储过程)

public class ReporteEntregasPresentacionController : Controller
{
    private EntregaMedicamentosEntities db = new EntregaMedicamentosEntities();

    public ActionResult Index(DateTime DateFrom, DateTime DateTo)
    {
        ReporteEntregasPresentacionViewModel rep = new ReporteEntregasPresentacionViewModel();

        string sqlQuery = "[dbo].[spEntregasPorPresentacion] ({0},{1})";
        Object[] parameters = { DateFrom, DateTo };            
        rep.LstEntregasPresentacionViewModel = db.Database.SqlQuery<ItemEntregasPresentacionViewModel>(sqlQuery, parameters).ToList();

        return View(rep);
    }
}

视图模型

public class ReporteEntregasPresentacionViewModel
{
    public int index;
    public List<ItemEntregasPresentacionViewModel> LstEntregasPresentacionViewModel;
}

public class ItemEntregasPresentacionViewModel    {

    public string idProducto { get; set; }
    public string Descripcion { get; set; }
    public string EntregasTotales { get; set; }
}

我现在没有视图,但我应该是这样的:

@model EntregaMedicamentos.Models.ReporteEntregasPresentacionViewModel
<link href="~/Content/css/styles.css" rel="stylesheet" />
@{
    ViewBag.Title = "ReporteEntregasPresentacion";
}

<h2>ReporteEntregasPresentacion</h2>

@using (Html.BeginForm("Index", "Entrega", FormMethod.Post))
{
    <div class="card text-white bg-secondary">
        <h5 class="card-header">Search</h5>
        <div class="card-body">
            <div class="row">
                <div class="col-md-6">
                    <div class="input-group">
                        @Html.TextBox("DateFrom", ViewBag.currentFilter1 as DateTime?, new { @class = "form-control", placeholder = "Desde fecha", @readonly = "true", type = "datetime" })
                        @Html.TextBox("DateTo", ViewBag.currentFilter2 as DateTime?, new { @class = "form-control", placeholder = "Hasta fecha", @readonly = "true", type = "datetime" })
                        <button id="Submit4" type="submit" style='font-size:22px ;color:blue'><i class='fas fa-search'></i></button>
                    </div>
                </div>
            </div>
        </div>
    </div>
}

<br>
<table class="table table-striped ">
    <tr class="table-primary">
        <th>
            Código
        </th>
        <th>
            Producto
        </th>
        <th>
            Entregas Totales
        </th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.idProducto)
            </td>

            <td>
                @Html.DisplayFor(modelItem => item.Descripcion)
            </td>

            <td>
                @Html.DisplayFor(modelItem => item.Valor)
            </td>
        </tr>
    }
</table>

标签: entity-frameworkmodel-view-controllerasp.net-mvc-5

解决方案


我最终创建了一个真实的表/模型,然后它与视图模型一起工作得很好。谢谢。


推荐阅读