以下のコードは、アクションリンクをWebグリッドの列の1つに挿入します。
@{
View.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
var usersGrid = new WebGrid(source: Model,
rowsPerPage: 40);
}
@usersGrid.GetHtml(
tableStyle: "grid",
headerStyle: "head",
alternatingRowStyle: "alt",
columns: usersGrid.Columns(
usersGrid.Column(format: (item) =>
Html.ActionLink("Edit", "Edit", new { id = item.Id})),
usersGrid.Column("Surname")
)
)
しかし、私がその行をこれと交換すると:
usersGrid.Column(format: (item) => Html.CheckBox(item.Id)),
このエラーが発生します:
エラー4'System.Web.Helpers.WebGrid.Column(string、string、System.Func、string、bool) 'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります。
2つの違いがよくわかりません。なぜ一方が機能し、もう一方がエラーになるのですか?
最終的な目標は、いくつかのチェックボックスをオンにしてから、送信して情報を印刷できるようにすることです。
これが最終的に私のために働いたものです。
usersGrid.Column(header: "Print?", format: @<text><input name="Prints"
type="checkbox" value="@item.ID" /></text>),
Nick Harrisに感謝します。答えは、彼のブログのコメントにあります: http://www.nickharris.net/2010/10/a-first-look-at-the-asp-net- mvc-3-webgrid /
これは私のために働いています:
grid.Column("SiparisNo", "Seç", format: (item) => Html.CheckBox(String.Format("Secili_{0}", (int)item.SiparisNo), false, new { @style = "width:60px;" }))
ダイナミクス(アイテム)で拡張メソッド(Html。*)を使用することに注意する必要があります...それはcsharpではうまく機能しません。新しい{}プロジェクションを実行するか、ToStringを呼び出すと、動的ではなくなります。または、(object)item.Idをキャストすることもできます。
usersGrid.Column(format: (item) => Html.CheckBox((string)item.Id)),
これはうまくいくはずです
最も簡単な方法:
usersGrid.Column(format: (item) => Html.CheckBox("Id"))
このエラーは、CheckBox呼び出しがActionLinkが返しているのと同じデータ型を返さないために発生しています。
これはあなたがすることです。アクションリンク呼び出しとチェックボックス呼び出しで同じ引数を使用してメッセージボックス呼び出しを実行し、関数呼び出しTypeName()内でそれぞれをラップし、結果をメッセージボックスに表示してuに表示します。また、両方で.ToStringを実行します。ここで、結果を確認します。返されたデータ型の間に不一致があるかどうかがわかります。可能であれば、結果を投稿してください。詳細をお知らせします。お知らせ下さい。
精力的な検索の結果、最適な解決策が見つかりました。HTMLヘルパーを使用するのが難しい場合は、代わりにこのロジックを使用できます。
grid.Column(header: "", format: @<text><input name="chkBox" type="checkbox" value="@item.Id" @(item.Id == false ? null : "checked") /></text>)