По мнению, у меня есть:
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")
}
}
Вам нужно добавить пространство имен, для этого требуется С#, чтобы получить расширение.
using My.Namescape.ExtensionClass;
Поместите его прямо на бритву. Кроме того, вы можете добавить его в файл Web.config
в папке "Представления". Таким образом, он доступен для всех видов Razor.
Вам не нужно писать код Razor, если вы создаете для него HTMLHelper. Этот помощник может использоваться столько раз, сколько вы хотите. Поэтому вам не нужно добавлять это к своему виду каждый раз.
Класс, который, я думаю, вам следует добавить, будет выглядеть следующим образом:
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, поэтому в нем могут быть некоторые синтаксические ошибки.