2010-11-16 171 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()) 
      )