webgrid(剃刀)中的Mvc 3文本框

时间:2010-11-16 14:54:29

标签: asp.net-mvc razor webgrid

简单问:如何让文本框显示值。 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 个答案:

答案 0 :(得分:6)

扩展方法(即Html.TextBox)不适用于动态对象(即项目)......这是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”参数的固有lambda - 你不应该自己声明这个。

答案 1 :(得分:3)

相当复杂但有效:

@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语法,坦率地说,在使用MVCContrib Grid后,我对WebGrid助手有点失望。

答案 2 :(得分:2)

那个适合我的人

@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>

答案 3 :(得分:1)

试试这个:

grid.Column(format: (item) => Html.TextBox("LastName", (object) item.LastName))

答案 4 :(得分:0)

我必须按如下方式将对象转换为字符串:

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

答案 5 :(得分:0)

试试这个

grid.Column("AmountValue", header: "Amount", format:@<text><input name="Amount" type="text" value="@item.AmountValue"</text>)

答案 6 :(得分:0)

根据条件显示链接或纯文本:

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())
            )