Telerik MVC グリッドがあります。
列の 1 つは、特定のユーザーから非表示にする必要があります。
これは、.Visible を使用して簡単に実現できます。
問題は、行の編集モードを起動すると、非表示にしたい列が編集ビューに表示されることです。
グリッド ビューと編集ビューの両方から列を非表示にする方法はありますか?
編集: ポップアップ編集モードと Ajax バインディングを使用しています。
Telerik MVC グリッドがあります。
列の 1 つは、特定のユーザーから非表示にする必要があります。
これは、.Visible を使用して簡単に実現できます。
問題は、行の編集モードを起動すると、非表示にしたい列が編集ビューに表示されることです。
グリッド ビューと編集ビューの両方から列を非表示にする方法はありますか?
編集: ポップアップ編集モードと Ajax バインディングを使用しています。
編集フォームからの列の非表示は、編集モードによって異なります。使用している編集モードを指定していないため、すべての編集モードの解決策を示します。
Inline および InCell - 列を作成するだけReadonly()
で、編集できなくなります。
ポップアップまたはインフォーム - これらのモードHtml.EditorForModel
は、モデルのすべてのプロパティを表示するように設計されています。その結果、列としてバインドされていないプロパティも表示されます。編集フォームから何かを隠すには、OnEditイベントを介して JavaScript で行う必要があります。ただし、OnEdit イベントは Ajax バインド中にのみ発生します。ajax を使用しているか、サーバー バインディングを使用しているかは、説明から明らかではありません。サーバー バインディングを使用する場合は、OnLoad JavaScript イベントにフックし、jQuery を使用してエディターから不要な列を非表示にする必要があります。
これがお役に立てば幸いです...そして行間のすべてのスペースについて申し訳ありませんが、それがないと、コードは乱雑に見えました。
Atanas Korchevが言ったように、javascriptを使用できますが、もっと簡単な方法があります。列を次のように定義できます<ScaffoldColumn(False)> :
Public Class EntityS
<Key()> _
<ComponentModel.ReadOnly(True)> _
<DisplayName("Id")> _
<ComponentModel.DataAnnotations.Editable(False)> _
**<ScaffoldColumn(False)> _**
Public Property Id_EntityS As Integer
...
...
End Class
@(Html.Telerik().Grid(Of EntityS)() _
.Name("Grid") _
.DataKeys(Sub(keys)
keys.Add("Id_EntityS")
End Sub) _
.ToolBar(Sub(commands)
commands.Insert().ButtonType(GridButtonType.ImageAndText) _
.ImageHtmlAttributes(New With {.style = "margin-left:0"})
End Sub) _
.DataBinding(Sub(dataBinding)
dataBinding.Ajax() _
...
End Sub) _
.Columns(Sub(columns)
...
columns.Command(Sub(commands)
commands.Edit().ButtonType(GridButtonType.ImageAndText)
commands.Delete().ButtonType(GridButtonType.ImageAndText)
commands.Edit.HtmlAttributes("onedit")
End Sub).Width(180).Title("Commands")
End Sub) _
.Editable(Sub(editing)
editing.Mode(GridEditMode.PopUp).Window(Sub(window)
End Sub)
End Sub) _
....)
Atanas の優れた応答に加えて、サーバー バインディングを使用している場合は、Html.EditorForModel が ShowForDisplay および ShowForEdit プロパティを使用して、プロパティのスキャフォールドをいつ作成するかを決定できるという事実を利用できます。残念ながら、これらを個別に設定する組み込みの方法はありませんが、独自の ModelMetadataProvider を作成して登録することができます。この SO 回答のコードを使用したため、編集フォームに表示される内容を C# コードで簡単に指定できました。