Mvc 3 texbox в сетке (бритва) - PullRequest
6 голосов
/ 16 ноября 2010

Простой вопрос: Как вы получаете текстовое поле, чтобы показать значение. Код ниже сбой на item.LastName

@model List<Mvc2010_11_12.Models.Employee>
@{
    var grid = new WebGrid(source: Model,defaultSort: "FirstName",rowsPerPage: 3);
}

<div id="grid1">
    @grid.GetHtml(columns: grid.Columns(
        grid.Column("LastName"),
        grid.Column(format: (item) => Html.TextBox("LastName", item.LastName))
    ))
</div>

Ответы [ 7 ]

6 голосов
/ 19 ноября 2010

Методы расширения (т. Е. Html.TextBox) плохо работают с динамическими объектами (т. Е. Item) ... это ограничение c #.

У вас есть несколько вариантов:

формат: InputExtensions.TextBox(Html, "Last Name", item.LastName) // static call

формат: Html.TextBox("Last Name", (object)item.LastName) // cast as non-dynamic object

формат: &lt;input type="text" name="LastName" value="@item.LastName" /&gt; // avoid extensions

Кроме того, я считаю, что существует внутренняя лямбда с параметром "item" - вам не нужно объявлять это самостоятельно.

3 голосов
/ 16 ноября 2010

Довольно запутанный, но работает:

@helper TextField(Employee employee, HtmlHelper<IEnumerable<Employee>> html)
{
    @html.TextBoxFor(x => employee.LastName)
}

<div id="grid1">
    @grid.GetHtml(columns: grid.Columns(
        grid.Column("LastName"),
        grid.Column(format: item => TextField(item.Value, Html))
    ))
</div>

Возможно, есть лучший подход. Все еще изучая синтаксис Razor, и, откровенно говоря, я немного разочарован помощником WebGrid после использования MVCContrib Grid .

2 голосов
/ 30 декабря 2010

Это работает для меня

@model List<Mvc2010_11_12.Models.Employee>
@{
    var grid = new WebGrid(source: Model,defaultSort: "FirstName",rowsPerPage: 3);
}

<div id="grid1">
    @grid.GetHtml(columns: grid.Columns(
        grid.Column("LastName"),
        grid.Column(format: @<span>@Html.TextBox("LastName",@item.LastName as object)</span>   )
    ))
</div>
1 голос
/ 19 мая 2011

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

grid.Column(format: (item) => Html.TextBox("LastName", (object) item.LastName))
0 голосов
/ 26 января 2012

Отображение ссылки или простого текста на основе условия:

grid.Column(format: (dbItem) => dbItem.QtyCompleted == 0 ?
                 Html.ActionLink(
                 "Start Setup",
                 "SaveData", 
                 "Workorder",
                 new
                   {
                       msid = dbItem.MSID,
                       qtyCompleted = 0, 
                       serialNum = "ABC"
                   },
                 new 
                   { 
                       onclick = "return ConfirmAction('Start Setup');" 
                   }) :
                 Html.Label(((DateTime)dbItem.StartTime).ToShortDateString())
            )
0 голосов
/ 29 июля 2011

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

grid.Column("AmountValue", header: "Amount", format:@<text><input name="Amount" type="text" value="@item.AmountValue"</text>)
0 голосов
/ 27 июля 2011

Мне пришлось привести объект к строке следующим образом:

format: (item) => Html.ActionLink(
    (item.AppCode as object).ToString(),
    "Index",
    "ApplicationHealthCheck",
    new { Code = item.AppCode },
    null),
...