MVC Grid显示另一个值

时间:2015-01-17 20:22:49

标签: c# asp.net-mvc razor

在视图中,我有:

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")
    }
}

2 个答案:

答案 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的情况下键入了此代码,因此可能会出现一些语法错误。