webgrid中的Mvc 3 texbox(剃须刀)

use*_*698 6 asp.net-mvc webgrid razor

简单问:如何让文本框显示值.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>
Run Code Online (Sandbox Code Playgroud)

小智 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 - 你不应该自己声明这个.


Dar*_*rov 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>
Run Code Online (Sandbox Code Playgroud)

也许有更好的方法。仍在学习 Razor 语法,坦率地说,在使用MVCContrib Grid之后,我对 WebGrid 帮助器有点失望。