在视图上显示存储过程的结果

时间:2017-01-24 17:01:30

标签: sql asp.net stored-procedures

我正在尝试在视图上显示存储过程的结果。我有一个ASP.NET MVC应用程序,其代码如下。我使用EntityFramework生成模型。

public class ProjectsController : Controller
{
    private DatabaseEntities db = new DatabaseEntities();

    // GET: Projects
    public ActionResult Index()
    {
        var projects = db.Projects.Include(p => p.Headquarter);
        return View(projects.ToList(), db.CALCULATEBUDGET());
    }
}

我在这部分得到以下错误:db.CALCULATEBUDGET()

Argument 1: cannot convert from 'System.Collections.Generic.List<TestApplication.Models.Project>' to 'string'   TestApplication C:\TestApplication\TestApplication\Controllers\ProjectsController.cs    21  Active


Argument 2: cannot convert from 'System.Data.Entity.Core.Objects.ObjectResult<TestApplication.Models.CALCULATEBUDGET_Result>' to 'string' TestApplication   C:\TestApplication\TestApplication\Controllers\ProjectsController.cs 21 Active

我的存储过程:

CREATE PROCEDURE dbo.CALCULATEBUDGET  
AS  
SELECT MonthlyRent, Budget, 100 * H.MonthlyRent/P.Budget AS RentPercentage
FROM Headquarter H, Project P
WHERE H.HeadquarterId = P.Headquarter_HeadquarterId

我正在计算租金与预算的百分比。然后我想在视图中显示结果。

1 个答案:

答案 0 :(得分:1)

首先,当您返回一个视图时,您需要传递名称或将其保留为空,然后使用默认值进行操作。您也可以传递模型,但您所做的是传递两个数据项。第一个需要是视图名称:

return View( "YourViewName", yourDataModel);

MVC的主要概念是:这里是一个View,这里是一个模型形式的View数据。

在视图中直接从数据库中抛出对象通常是一个坏主意,我建议你稍微解开你的东西。

拥有一个用于获取数据的业务层,您可以映射到与视图需要显示的模型对象相匹配的模型对象。您可以将其视为数据的翻译层以及View需要显示的内容。经验法则,只发送到View所需要显示的内容,仅此而已。

您可以在一个数据模型中为视图组合多个多个数据项,如果这是您需要的,但您仍然只将一个对象传递给您的视图。