2010-11-16 126 views
6

简单问:如何获得文本框以显示值。下面的代码失败在item.LastNamewebgrid中的Mvc 3 texbox(剃须刀)

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

回答

-1

我从来没有使用的WebGrid助手呢,does this link help?它讨论了在剃刀中使用webgrid helper。

+0

不,那是我与打码。我只是尝试在网格中插入一个TextBox并填充模型中的值。我有意识地错过了一些东西。 – user408698 2010-11-16 23:33:02

+0

好的,对不起。 – Chaddeus 2010-11-17 00:27:55

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帮手有点失望。

+0

这样做最容易。 – user408698 2010-11-16 23:44:32

+0

@ user408698,我希望有但我有点怀疑。 – 2010-11-17 06:03:59

+0

使用此方法时,如果将带有文本框的表单提交回HttpPost操作,您怎么知道哪个值属于哪个记录? – 2011-06-11 16:42:25

6

扩展方法(即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

而且,我相信有一个固有的拉姆达与 “项目”参数 - 你不需要自己声明这个。

+0

我将问题提交给我正在修改的代码的主持人的博客(Shiju Varghese)。我认为我们需要如此的最佳实践指导。 – user408698 2010-11-19 17:12:10

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

试试这个:

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

我不得不投对象的字符串如下:

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

试试这个

grid.Column("AmountValue", header: "Amount", format:@<text><input name="Amount" type="text" value="@item.AmountValue"</text>) 
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()) 
      )