Как сделать MVC 3 Webgrid со столбцом флажка? - PullRequest
11 голосов
/ 29 ноября 2010

Приведенный ниже код вставит ссылку на действие в один из столбцов веб-сетки.

    @{
    View.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";

    var usersGrid = new WebGrid(source: Model,
        rowsPerPage: 40);
}
@usersGrid.GetHtml(
        tableStyle: "grid",
        headerStyle: "head",
        alternatingRowStyle: "alt",
                columns: usersGrid.Columns(
                    usersGrid.Column(format: (item) => 
                         Html.ActionLink("Edit", "Edit", new { id = item.Id})),
                    usersGrid.Column("Surname")
        )
    )

Но если я обменяю эту строку на это:

                usersGrid.Column(format: (item) => Html.CheckBox(item.Id)),

Я получаю эту ошибку:

Ошибка 4 Лучший перегруженный метод соответствовать «System.Web.Helpers.WebGrid.Column (строка, строка, System.Func, строка, bool) 'имеет недопустимый аргументы.

Я не совсем понимаю разницу между двумя ... почему одна работает, а другая ошибка?

Конечная цель состоит в том, чтобы иметь возможность поставить галочку рядом с флажками, а затем отправить на печать их информацию.

Ответы [ 9 ]

23 голосов
/ 01 декабря 2010

В конце концов это то, что сработало для меня.

usersGrid.Column(header: "Print?", format: @<text><input name="Prints" 
      type="checkbox" value="@item.ID" /></text>),

Хочу поблагодарить Ника Харриса, ответ найден в комментариях к его блогу здесь: http://www.nickharris.net/2010/10/a-first-look-at-the-asp-net-mvc-3-webgrid/

5 голосов
/ 11 октября 2011

это работает для меня:

grid.Column("SiparisNo", "Seç", format: (item) => Html.CheckBox(String.Format("Secili_{0}", (int)item.SiparisNo), false, new { @style = "width:60px;" }))
4 голосов
/ 01 декабря 2010

Вы должны остерегаться использования методов расширения (Html. *) С динамикой (элемент) ... это не очень хорошо работает в csharp. Когда вы делаете новую проекцию {} или вызываете ToString, она перестает быть динамической. Кроме того, вы можете разыграть: (объект) item.Id.

2 голосов
/ 30 сентября 2011

usersGrid.Column(format: (item) => Html.CheckBox((string)item.Id)),

это должно работать

1 голос
/ 06 февраля 2014

Самый простой способ:

usersGrid.Column(format: (item) => Html.CheckBox("Id"))
0 голосов
/ 11 сентября 2017

После энергичного поиска я нашел оптимальное решение, вместо этого вы можете использовать эту логику, если вам трудно использовать HTML-помощники.

grid.Column(header: "", format: @<text><input name="chkBox" type="checkbox" value="@item.Id" @(item.Id == false ? null : "checked") /></text>)
0 голосов
/ 05 марта 2017

**

@{
  var grid = new WebGrid(source: Model.ToList(), canPage: true, canSort: true);
  grid.Pager (WebGridPagerModes.All);
}

**

<div id="g1">
    @grid.GetHtml(

    columns:grid.Columns
    (grid.Column(columnName:"paymentno",header:"PAYMENT NO"),

    grid.Column(columnName:"mname",header:"NAME"),

    grid.Column(columnName:"pamt",header:"AMOUNT"),

    grid.Column(header: "Header", format: @<text><input name="HasFormgivaren" type="checkbox" 
        value="@item.checkresult" @(item.checkresult == "True" ? "Checked" : null) /></text>)
    )
    )
</div>
0 голосов
/ 30 ноября 2010

Эта ошибка возникает из-за того, что вызов CheckBox не возвращает тот же тип данных, который возвращает ActionLink.

Это то, что вы делаете.Выполните вызов окна сообщения для вызова ссылки действия и вызова флажка с одинаковыми аргументами, вставьте каждый из них в вызов функции TypeName () и отобразите результаты в окне сообщения, которое вы увидите.Кроме того, выполните .ToString в обоих случаях, теперь посмотрите на результаты, они должны сообщить вам, есть ли расхождение между возвращенными типами данных, если вы можете, опубликовать результаты, и я могу рассказать вам больше.Дайте мне знать.

0 голосов
/ 29 ноября 2010

Попробуйте это

new HtmlString(usersGrid.Column(format: (item) => Html.CheckBox(item.Id)).ToString()),

вместо

usersGrid.Column(format: (item) => Html.CheckBox(item.Id)),
...