2010-11-16 15 views
6

Semplice Q: Come si ottiene la casella di testo per mostrare il valore. Codice qui sotto fallire su item.LastNameMvc 3 texbox in webgrid (rasoio)

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

risposta

-1

non ho mai usato ancora l'aiutante WebGrid, does this link help? Si discute utilizzando l'helper webgrid in rasoio.

+0

No, questo è il codice che sto giocando con. Sto solo cercando di inserire un TextBox nella griglia e riempire il valore dal modello. Mi sta assolutamente perdendo qualcosa. – user408698

+0

ah ok, mi dispiace per quello. – Chaddeus

3

Piuttosto contorta, ma funziona:

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

Forse c'è un approccio migliore però. Sto ancora imparando la sintassi del Razor e francamente sono un po 'deluso dall'assistente WebGrid dopo aver usato MVCContrib Grid.

+0

C'è un modo più semplice per farlo. – user408698

+0

@ user408698, spero che ci sia ma sono un po 'scettico. –

+0

Utilizzando questo approccio, quando il modulo con le caselle di testo viene inviato nuovamente a un'azione HttpPost, come fai a sapere quale valore appartiene a quale record? –

6

I metodi di estensione (ad esempio, Html.TextBox) non funzionano correttamente con gli oggetti dinamici (ad esempio, articolo) ... è una limitazione di C#.

Hai alcune opzioni:

formato: InputExtensions.TextBox(Html, "Last Name", item.LastName) // static call

formato: Html.TextBox("Last Name", (object)item.LastName) // cast as non-dynamic object

formato: &lt;input type="text" name="LastName" value="@item.LastName" /&gt; // avoid extensions

Inoltre, credo che c'è un lambda intrinseca con una "voce" parametro - non dovresti aver bisogno di dichiararlo tu stesso.

+0

Ho posto la domanda al blog del presentatore del codice che sto modificando (Shiju Varghese). Penso che abbiamo bisogno di una guida sulle migliori pratiche. – user408698

2

che si lavora per me

@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

Prova questo:

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

ho dovuto cast di oggetti di stringa come segue:

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

Prova questa

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

Visualizzazione Link o testo semplice basato su una condizione:

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