6

簡単な質問: テキストボックスに値を表示するにはどうすればよいですか? 以下のコードは 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>
4

7 に答える 7

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

また、「アイテム」パラメーターを持つ固有のラムダがあると思います-これを自分で宣言する必要はありません。

于 2010-11-18T21:21:12.513 に答える
3

それは私のために働く

@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>
于 2010-12-30T16:52:29.077 に答える
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 ヘルパーに少しがっかりしています。

于 2010-11-16T15:58:45.390 に答える
1

これを試して:

grid.Column(format: (item) => Html.TextBox("LastName", (object) item.LastName))
于 2011-05-18T23:25:25.107 に答える
0

これを試して

grid.Column("AmountValue", header: "Amount", format:@<text><input name="Amount" type="text" value="@item.AmountValue"</text>)
于 2011-07-29T11:09:45.240 に答える
0

次のように、オブジェクトを文字列にキャストする必要がありました。

format: (item) => Html.ActionLink(
    (item.AppCode as object).ToString(),
    "Index",
    "ApplicationHealthCheck",
    new { Code = item.AppCode },
    null),
于 2011-07-27T18:58:17.667 に答える
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())
            )
于 2012-01-26T18:29:33.167 に答える