我正在尝试在视图上显示存储过程的结果。我有一个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
我正在计算租金与预算的百分比。然后我想在视图中显示结果。
答案 0 :(得分:1)
首先,当您返回一个视图时,您需要传递名称或将其保留为空,然后使用默认值进行操作。您也可以传递模型,但您所做的是传递两个数据项。第一个需要是视图名称:
return View( "YourViewName", yourDataModel);
MVC的主要概念是:这里是一个View,这里是一个模型形式的View数据。
在视图中直接从数据库中抛出对象通常是一个坏主意,我建议你稍微解开你的东西。
拥有一个用于获取数据的业务层,您可以映射到与视图需要显示的模型对象相匹配的模型对象。您可以将其视为数据的翻译层以及View需要显示的内容。经验法则,只发送到View所需要显示的内容,仅此而已。
您可以在一个数据模型中为视图组合多个多个数据项,如果这是您需要的,但您仍然只将一个对象传递给您的视图。