在视图中,我有:
grid.Column("Complete", header: "Verified", format: (item) => @Html.Raw(item.Complete))
item.complete是一个整数。我创建了一个扩展方法来帮助显示相应的字符串值,因为只有3种可能性。 这是扩展方法:
public static string CompleteValue(this int value)
{
switch (value)
{
case 0:
return "Submitted";
case 1:
return "Verified - Incomplete";
case 2:
return "Verified - Complete";
}
//Default if we get this far
return "Submitted";
}
我不知道如何编写Razor代码以使其工作。我已经尝试将“.CompleteValue”放在代码中的几个地方但没有任何作用。 有没有人有任何建议?
编辑:这是视图:
@model IEnumerable<SendMailwithAttachment.Models.MailModel>
@using System.Activities.Statements
@using Hazards
@using SendMailwithAttachment.Models;
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>My Hazards</h2>
<script src="~/Scripts/jquery-1.7.1.min.js"></script>
@{
var dataContext = new HazardsDataContext();
var getHazards1 = from m in dataContext.Mail
where (m.User == User.Identity.Name)
select new{m.casenum,m.ID,m.User,m.Date,m.To,m.name,m.Hazard,m.PictureDataAsByte,
m.Risk,m.AfterPicture,m.status,m.Complete};
var getHazards = from n in getHazards1
orderby n.Complete // Order by the Completed (or Verified Status so that verified reports show up last)
select n;
var grid = new WebGrid(source: getHazards);
if (getHazards.Count() > 0)
{
@grid.GetHtml(columns: new[] {
grid.Column("Casenum", header: "Case #"),
grid.Column("Date", header: "Date"),
grid.Column("Hazard", header: "Hazard"),
grid.Column("Before",header: "Before",format:
@<Text><img src="@Url.Content(item.PictureDataAsByte)" width="175" height="175" />
</text>),
grid.Column("Risk", header: "Risk"),
grid.Column("After",header: "After",format:
@<Text><img src="@Url.Content(item.AfterPicture)" width="175" height="175" />
</Text>),
grid.Column("status", header: "Status"),
//grid.Column("Complete", header: "Verified", format:(item) => (item.Complete))
grid.Column("Complete", header: "Verified", format: (item) => @Html.CompleteValue(item.Complete))
//grid.Column("Complete", header: "Verified", format: (item) => @Html.Raw("<input type='checkbox' " + ((item.Complete==0) ? "checked" : "") + " disabled='disabled' />")),
})
}
else
{
@Html.Raw("No Data Found")
}
}
答案 0 :(得分:1)
你需要添加命名空间,C#需要这个来获取扩展名。
using My.Namescape.ExtensionClass;
把它放在剃刀顶部。或者,您可以将其添加到Views文件夹中的Web.config
文件中。通过这种方式,它可用于所有Razor视图。
答案 1 :(得分:0)
如果您为它创建HTMLHelper,则不必编写Razor代码。这个助手可以根据需要多次使用。因此,您不必每次都将其添加到您的视图中。
我认为你应该添加的课程如下:
public static class MVCHelpers
{
public static MvcHtmlString CompleteValue(this HtmlHelper htmlHelper, int value)
{
//create the html helper
var builder = new TagBuilder("text");
//Check value
switch (value)
{
case 0:
builder.SetInnerText("Submitted");
break;
case 1:
builder.SetInnerText("Verified - Incomplete");
break;
case 2:
builder.setInnerText("Verified - Complete");
break;
default:
builder.setInnerText("Submitted");
}
return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing));
}
}
所以现在我们创建了HTMLHelper,让我们转到视图。 在视图顶部添加了以下代码:
@namespace YourNameSpace
或者,如果您希望HTMLHelper可用于所有视图,请在web.config中插入以下行:
<add namespace="YourNameSpace" />
现在更改视图中的以下行:
grid.Column("Complete", header: "Verified", format: (item) => @Html.Raw(item.Complete))
要:
grid.Column("Complete", header: "Verified", format: (item) => @Html.CompleteValue(item.Complete))
您现在已经创建了自己的HTMLHelper。我希望这能解决你的问题。如果您对如何使其工作有更多疑问。请问:)
注意:我在没有IDE的情况下键入了此代码,因此可能会出现一些语法错误。