我从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>
答案 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视图中。我认为,最好尽可能将这种东西留给控制器。