10

ASP.Net MVC 3、Kendo UI Web、Kendoグリッドコントロール。

いくつかのフィールドを読み取り専用に構成しました。

.Model(model =>
      {
          model.Field(it => it.foobar).Editable(false);
          ...

インラインモードでは期待どおりに機能します。ただし、モードをポップアップに切り替えると、エディターに構造全体が表示されるため、必要なフィールド(編集不可としてマークされているフィールド)を編集できます。

では、ポップアップエディタに編集用にマークされたものだけが表示されるように、それらにマークを付けるにはどうすればよいでしょうか。

4

3 に答える 3

8

ポップアップエディターは、剣道とは完全に独立したMVCのエディターテンプレートを使用します。そのフィールドに読み取り専用のタグを付ける場合は、モデルのメタデータ属性をコードでアタッチする必要があります。元:

public class MyClassUsedInGrid
{
    [System.ComponentModel.DataAnnotations.Editable(false)]
    public string foobar {get;set;}
}

アップデート:

申し訳ありませんが、答えは元々不完全でした。組み込みのものはそれをサポートしていないので、これを処理するためにカスタムテンプレートを作成する必要があります(私はこれを私のプロジェクトに持っていて、それを忘れていました)。これを行うには、/ Views / Shared / EditorTemplates / string.cshtmlの下にビューを作成します(これはRazorで表示しますが、aspx構文に移植するのは簡単です)。

コードは次のようになります。

@model string
@if(ViewData.ModelMetadata.IsReadOnly){
    @Html.DisplayForModel()
}else{
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" })
}

これにより、編集可能なメタデータ属性が適切に処理されます。もちろん、これは文字列専用です。他のオブジェクトについても同様のことを行う必要があります。他のビルドインテンプレートがどのように見えるかを探している場合は、次のサイトを確認してください:http: //bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates。 html

パフォーマンスに関する補足:これをアプリケーションのいくつかの場所の1つの場所でのみ行う場合は、代わりに/ Views / YourView /EditorTemplates/の下に配置することをお勧めします。その理由は、組み込みのテンプレートがフレームワークにコンパイルされ、一般的に高速に動作するためです。または、共有フォルダーに残しますが、ExtendedStringのような名前を付けてから、次のように明示的なUIヒントを使用して編集可能に設定したタグプロパティを表示します。

[System.ComponentModel.DataAnnotations.Editable(false)]
[System.ComponentModel.DataAnnotations.UIHint("ExtendedString")]
public string foobar {get;set;}
于 2012-10-29T00:52:02.583 に答える
6

KendoUIのドキュメント(http://docs.telerik.com/kendo-ui/aspnet-mvc/validation)によると、プロパティに注釈を付ける必要があります[HiddenInput(DisplayValue = false)]

例:

[HiddenInput(DisplayValue = false)]
public int Id { get; set; }

テストされ、動作します。

于 2014-12-27T18:28:19.983 に答える
4

同様の、より単純ですが、あまり一般的ではない解決策は、カスタムエディタテンプレートを使用することです。

column.Bound(a => a.foobar).EditorTemplateName("Empty");

次に、「Empty.cshtml」をViews / Shared/EditorTemplatesに何も含めずに配置します。

于 2012-12-27T21:01:36.263 に答える