Как использовать WebGrid в виде cshtml?

Я могу использоватьWebGrid в любом контроллере вроде:

var grid = new WebGrid(emailsFetched, columnNames);

Мне пришлось добавить ссылку в моем проекте ASP.NET MVC, чтобыSystem.Web.Helpers за это.

Но когда я пытаюсь использовать эту сетку вview напрямую (во избежание создания экземпляров и других настроек в контроллере) написано:The type or namespace 'WebGrid' cannot be found, Хорошо, я попытался добавить ссылку здесь:

@using System.Web.Helpers но это бросает другую проблему:

There is no build provider registered for the extension '.cshtml'. You can register one in the <compilation><buildProviders> section in the machine.config or web.config. Make sure is has a BuildProviderAppliesToAttribute attribute which includes the value 'Web' or 'All'.

Это довольно странно ... Я видел достаточно примеров в сети, которые используют WebGrid и не должны ничего объявлять в представлении cshtml ...

Подскажите пожалуйста, как это решить? Или почему я сталкиваюсь с этой очень уродливой проблемой?

 Murat Yıldız22 апр. 2018 г., 11:31
Не могли бы вы попробовать подход, приведенный в моем ответе ниже, и дайте мне знать, если он работает? Заранее спасибо...

Ответы на вопрос(3)

ASP.NET MVC4 Проект без проблем.

1) открытоNuGet Package Manager вVisual Studio и поиск“microsoft-web-helper” и установить.

2) После его установки откройтеweb.config в вашем решении и изменитьconnectionStringName параметр дляDefaultMembershipProvider, DefaultRoleProvider веDefaultSessionProvider (если вы этого не сделаете, вы можете столкнуться с тем, что «DefaultConnection» не был найден в конфигурации приложений или строка подключения пуста. & # x201D; ошибка.

3) Перестройте свой проект, а затем используйте смиллярное определение, как показано ниже в вашем бритвенном представлении.

Note: + Изменить"Title", "Controller" а также"Action" имена вHtml.ActionLinks согласно вашему проекту.

View:

@{
var grid = new System.Web.Helpers.WebGrid(
    source: Model,
    columnNames: new List<string>() { "Title" },
    ajaxUpdateContainerId: "myGrid",
    defaultSort: "Name",
    canPage: true,
    canSort: true,
    rowsPerPage: 5
    );
grid.SortDirection = SortDirection.Ascending;
}


@grid.GetHtml(
      tableStyle: "table", /*your class name for this property*/
      headerStyle: "webgrid-header",/*your class name for this property*/
      footerStyle: "webgrid-footer", /*your class name for this property*/
      rowStyle: "webgrid-row-style", /*your class name for this property*/
      alternatingRowStyle: "webgrid-alternating-row",/*your class name...*/                                         selectedRowStyle: "webgrid-selected-row",/*your class name for this property*/

      firstText: "<<",
      lastText: ">>",
      mode: WebGridPagerModes.All,
      fillEmptyRows: true,

      columns: grid.Columns(
       grid.Column("ApplicantID", "No", style: "span1", canSort: true),
       grid.Column("Name", "Name", style: "span2", canSort: true),
       grid.Column("Surname", "Surname", style: "span2", canSort: true),
       grid.Column("Organization", "Org.", style: "span2", canSort: true),
       grid.Column("MeetingId", "Meeting", style: "span1", canSort: true),
        //some format usage samples:
        //grid.Column("Email", "e-mail", style: "span1", canSort: true, format: @<a href="mailto:@item.Email">@item.Email</a>),  
        //grid.Column("BirthDate", format: p=>p.BirthDate.ToShortDateString()),

//for using multiple Html.ActionLink in a column using Webgrid
grid.Column("Operations", format: (item) =>
 new HtmlString(
       Html.ActionLink("Show Details", "Edit", "Admin", new
       {
           applicantId = item.ApplicantID,               
           title = "Detail",
           @class = "icon-link",
           style = "background-image: url('../../Content/icons/detail.png')"
       }, null).ToString() +
       Html.ActionLink("Edit Record", "Edit", "Admin", new
       {
           applicantId = item.ApplicantID, 
           title = "Edit",
           @class = "icon-link",
           style = "background-image: url('../../Content/icons/edit.png')"
       }, null).ToString() +
       Html.ActionLink("Delete Record", "Edit", "Admin", new
       {
           applicantId = item.ApplicantID,
           title = "Delete",
           @class = "icon-link",
           style = "background-image: url('../../Content/icons/delete.png')"
       }, null).ToString()
 )
)
),
numericLinksCount: 5
)


Вотcss классы ниже используются вRazor, Если вы хотите использовать свойcss определения просто изменяют свойства стиля на ваши (некоторые свойства являются необязательными, как те, что вRazor View).

<style type="text/css">    
    .webgrid-operations { /*for limiting the width of Operations 
                          menu used in the WebGrid*/
    width: 65px;
}

.webgrid-header td {
    text-align: left;
}

.webgrid-header th {
    background-color: #EFEFEF;
    margin-bottom: 2px;
}

.webgrid td {
    padding-right: 15px;
}

.webgrid-footer td {
    font-family: 'open_sanssemibold', sans-serif;
    font-size: 1em;
    text-align: right !important;
    padding-right: 21px !important;
    color: #000;
    background-color: #EFEFEF;
}

    .webgrid-footer td a {
        text-align: right !important;
        padding: 0 .4em 0 .4em;
        font-size: .83em;
        text-decoration: none;
        color: #FFFFFF;
        border: 1px solid #C0C0C0;
        background-color: #808080;
    }

        .webgrid-footer td a:hover {
            background-color: #6BBEC7;
        }

        .webgrid-footer td a.selected {
            background-color: #f00;
            color: #f00;
        }

.webgrid a {
    color: #fff;
}

.colRowButton {
    width: 70px;
    text-align: left;
}

.webgrid-row-style {
    /*border-bottom: 1px solid #E8EEF4;*/
}

.webgrid-alternating-row td {
    /*background-color: #f9f9f9;*/
}

.webgrid-selected-row {
    /*font-weight: bold;*/
}    

<style type="text/css">
    a.icon-link {
        background-color: transparent; 
        background-repeat: no-repeat; 
        background-position: 0px 0px;
        border: none;
        cursor: pointer; 
        width: 16px;
        height: 16px;
        margin-right: 8px; 
        vertical-align: middle;
    }

    .span5 {
    width:380px
    }
    .span4 {
    width:300px
    }
    .span3 {
    width:220px
    }
    .span2 {
    width:140px
    }
    .span1 {
    width:60px
    }
    </style>
}


Надеюсь это поможет...

но я удалил более раннюю версию и заново установил последнюю версию Microsoft ASP.NET MVC4 из Nuget, и у меня все работает. Надеюсь, это поможет кому-то еще. Перепробовал все решения, но это было единственное, что сработало.http://forums.asp.net/t/1823940.aspx?MVC4+WebGrid+problem+in+View+Razor+

Решение Вопроса

<assemblies> <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> </assemblies>

должен быть добавлен в веб-конфигурации, подsystem.web раздел, в том числеcompilation теги так будет выглядеть так:

<system.web>
    <compilation debug="true" targetFramework="4.0">
        <assemblies>
            <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        </assemblies>
    </compilation>
</system.web>

Ваш ответ на вопрос