Asp.net mvc webgrid中的Mvc 3 texbox(razor)

Asp.net mvc webgrid中的Mvc 3 texbox(razor),asp.net-mvc,razor,webgrid,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( g

简单问题:我如何让文本框显示值。下面的代码在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>
@型号列表
@{
var grid=new WebGrid(来源:Model,defaultSort:“FirstName”,rowsPerPage:3);
}
@GetHtml(列:grid.columns(
grid.Column(“LastName”),
grid.Column(格式:(item)=>Html.TextBox(“LastName”,item.LastName))
))

非常复杂,但可以:

@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>
@helper TextField(Employee-Employee,htmlhelp-html)
{
@html.TextBoxFor(x=>employee.LastName)
}
@GetHtml(列:grid.columns(
grid.Column(“LastName”),
grid.Column(格式:item=>TextField(item.Value,Html))
))
也许有更好的方法。仍然在学习Razor语法,坦率地说,在使用WebGrid帮助程序之后,我对它有点失望。

扩展方法(例如Html.TextBox)不能很好地处理动态对象(例如item)。。。这是c#的一个限制

您有几个选择:

格式:
InputExtensions.TextBox(Html,“姓氏”,item.LastName)//静态调用

格式:
Html.TextBox(“姓氏”,“对象”项.LastName)//转换为非动态对象

格式:
input type=“text”name=“LastName”value=“@item.LastName”///避免扩展名

另外,我相信有一个固有的lambda,带有一个“item”参数-您不需要自己声明这个参数。

这个参数适合我

@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>
@型号列表
@{
var grid=new WebGrid(来源:Model,defaultSort:“FirstName”,rowsPerPage:3);
}
@GetHtml(列:grid.columns(
grid.Column(“LastName”),
grid.Column(格式:@@Html.TextBox(“LastName”,@item.LastName作为对象))
))
试试这个:

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

我必须将对象强制转换为字符串,如下所示:

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

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

grid.Column(“AmountValue”,标题:“Amount”,格式:@根据条件显示链接或纯文本:

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

有一种更简单的方法。@user408698,我希望有,但我有点怀疑。使用这种方法,当带有文本框的表单提交回HttpPost操作时,您如何知道哪个值属于哪个记录?@Boris B,您可以包含一个包含记录id的额外隐藏输入。我想这意味着
hidden id=“RowId{N}”textbox id=“LastName{N}”,N=1..RowCount
。谢谢。我已经把这个问题带到了我正在修改的代码的演示者(Shiju Varghese)的博客上。我想我们需要最佳实践的指导。我想用这个bt添加动态文本框列,它是不可编辑的。。例如,我无法在此文本框中输入任何值。如何将webgrid中文本框列的值保存到数据库中的表中。