将Store过程列放在Razor代码中

时间:2014-02-10 16:38:17

标签: sql asp.net-mvc c#-4.0 model-view-controller linq-to-sql

我从MVC调用存储过程,它只返回单个记录。

SP包含:

PROCEDURE [dbo].[GetMonthlyReport] @emplID INT = NULL,
    @month VARCHAR(50) = NULL
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    IF (@emplID IS NOT NULL AND @month IS NOT NULL) --If Block begins
    BEGIN
        SELECT *
        FROM MonthlyRecord
        WHERE Month = @month AND EmplID = @emplID
    END --If block ends
    ELSE --Else block begins
    BEGIN
        RETURN 0
    END --Else block ends
END

现在它正在从MonthlyRecord View中选择,empID,Overtime,Month,TotalDuration,

我想要做的是将这些字段放在自定义模板中,例如HTML TABLE或List,如:

<table style="width:300px">
<tr>
<td>Employee ID</td>
<td>Month</td> 
</tr>
<tr>
<td>@empID</td>
<td>@Month</td> 
</tr>
</table>

动态的东西。

MVC代码:

控制器:

public ActionResult Generated_PaySlip(int? emplID, String month) 
{
IEnumerable<GetMonthlyReportResult> PaySlip = DataContext.GetMonthlyReport(emplID, month).ToList();
return View(PaySlip);
}

查看:

@using EmployeeAttendance_app.Models

<h2>Employee Pay Slip</h2>

<table style="width:300px">
<tr>
<td>Employee ID</td>
<td>Month</td> 
</tr>
<tr>
<td>@empID</td>
<td>@Month</td> 
</tr>
</table>

1 个答案:

答案 0 :(得分:1)

你非常接近,但你需要告诉Razor查看你正在使用的模型。 修改你的Razor代码:

@model GetMonthlyReportResult
@using EmployeeAttendance_app.Models

<h2>Employee Pay Slip</h2>

<table style="width:300px">
<tr>
<td>Employee ID</td>
<td>Month</td> 
</tr>
<tr>
<td>@Model.empID</td>
<td>@Model.Month</td> 
</tr>
</table>

然后,您可以使用Model作为Razor视图中的变量来访问属性。

<强>更新

我刚注意到你正在归还IEnumerable。您需要将其转换为单个项目。由于您只希望看到一个返回项目,我认为在控制器中这样做会更容易。

public ActionResult Generated_PaySlip(int? emplID, String month) 
{
    IEnumerable<GetMonthlyReportResult> PaySlip = DataContext.GetMonthlyReport(emplID, month).ToList();
    return View(PaySlip.FirstOrDefault());
}

<强>更新

您可以将控制器保留在示例中,并在Razor视图中执行此操作:

@model IEnumerable<GetMonthlyReportResult>
@using EmployeeAttendance_app.Models

@{
    var item = Model.FirstOrDefault();
}

<h2>Employee Pay Slip</h2>

<table style="width:300px">
<tr>
<td>Employee ID</td>
<td>Month</td> 
</tr>
<tr>
<td>@item.empID</td>
<td>@item.Month</td> 
</tr>
</table>

但同样,由于您只需要一个项目,因此无需将该逻辑添加到Razor视图中。我认为,最好尽可能将这种东西留给控制器。