1

私がやろうとしていること:

  1. ページの前半に、DatePicker(s)、Dropdownlist(s)、NumericTextBox(s) などの Kendo UI コントロールを含むフォームがあります。

  2. 後半には Kendo UI MVC Grid コントロールがあります

    • この Kendo UI グリッド コントロールには 8 つの列があり、そのうち 2 つの列には Kendo ドロップダウン リスト (EditorTemplate) と CheckBox (EditorTemplate) があります。
    • Kendo UI Grid コントロールは Ajax バインディングです。
  3. 保存ボタンをクリックすると、Kendo UI コントロール (前半) と Kendo UI グリッド コントロール (後半) のすべての値が、「Ajax Post」を介して Json オブジェクトとしてコントローラーにポストされます。

  4. 上記のプロセスにモデルバインディングを使用しています

問題または私が直面している問題:

他の Kendo UI コントロールを含むフォームの前半は、それらの値をコントローラに適切に送信していますが、Kendo UI グリッドではいくつかの列の値を送信する際に問題が発生しています。

  • データ型が decimal の Kendo UI Grid の列に値がポストされない

  • CheckBox や kendo ドロップダウンなどの EditorTemplate コントロールは、選択する"[Object Object]"と、チェックボックス コントロールではなく、ドロップダウン リストの値とブール値の実際の値を表示します。

4

1 に答える 1

5

グリッドをフォームの一部として使用する必要があるとは思えません。通常、グリッドは他のコントロールとのバッチ フォーム送信ではなく、ajax を介して対話します - フォームからアンラップします。これだけでも頭痛の種から解放されます。

前半:

Kendo().DatePickerFor()、Kendo().DropDownListFor() などを使用してみてください。これらの Kendo コントロールに .Name() で明示的に名前を付ける必要はありません。これは、モデル バインディングに役立ちます。

後半:

10 進数以外の別のデータ型を使用してください。それは大変だと思いますか?日付が添付されていない時刻に TimeSpan 型を使用してみてください (成人男性は泣きます)。

通常、ブーリアン/チェックボックスの EditorTemplate は必要ありません。このトリックを使用してください (コードを残さないため、Razor を使用していると仮定します)。

columns.Bound(b => b.IsActive).ClientTemplate("<input type='checkbox' ${ IsActive == true ? checked='checked' : ''} disabled />");

グリッド DDL の最善の策は次のとおりです。

columns.ForeignKey(b => b.CustodianIdPrimary, Model.Custodians, "Id", "FullName").EditorViewData(new {ProjectId = Model.ProjectId}).EditorTemplateName("CustodianDropDownList");

Model.Custodians は、可能なすべてのアイテムのリストです。次に、EditorTemplate をこのリストにバインドするか、この特定の DDL でサブセットが必要な場合は、次のように ajax 呼び出しを行って入力します。

@model int
@(Html.Kendo().DropDownList()
    .Name(ViewData.TemplateInfo.GetFullHtmlFieldName(""))
    .DataValueField("Id")
    .DataTextField("FullName")
    .OptionLabel("Unassigned")
    .DataSource(dataSource => dataSource
        .Read(read => read.Action("ReadProjectCustodiansDdl", "SysMaint", new {projectId = ViewData["ProjectId"]}))
    )
)

しかし、これは剣道提供の例です

@model object       
@(
    Html.Kendo().DropDownListFor(m => m)        
        .BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"])
)

リスト全体を渡すためにこのサンプルで使用されている、最初の columns.ForeignKey での EditorViewData パラメータの使用に注意してください。

幸運を!

于 2013-02-20T03:51:55.523 に答える