1

Ajax バインディングを使用した Knedo UI MVC グリッドを使用したインライン編集を実装し、サーバー側の検証をコントローラーで処理し、- を使用してエラーを送り返しました。

ModelState.AddModelError("エラー: ", ex.Message);

@(Html.Kendo().Grid<AnalyticsServiceWeb.ViewModel.SomeViewModel>() .Name("Grid") .Columns(columns => { columns.Bound(p => p.Name); columns.Bound(p => p.Path); columns.Bound(p => p.Space); columns.Command(command => { command.Edit(); command.Destroy(); }); }) .ToolBar(toolbar => toolbar.Create()) .Editable(editable => editable.Mode(GridEditMode.InLine)) )

function error_handler(e) {
    if (e.errors) {
        var message = "Errors:\n";
        $.each(e.errors, function (key, value) {
            if ('errors' in value) {
                $.each(value.errors, function () {
                    message += this + "\n";
                });
            }
        });
        alert(message);
    }
}

サーバー側の例外が発生するとサーバー側のエラー メッセージが表示されますが、UI でのアクションは完了します。つまり、サーバー側の例外が発生しても、新しいレコードがグリッドに追加されて更新されます。

アクション開始前に UI の状態を保持する方法はありますか?そのように動作するはずですが、何か不足しているかどうかわかりませんか?

前もって感謝します

4

1 に答える 1

1

Kendo UIは、ビューモデルで(ほとんどの)データ注釈をサポートします。これにより、Kedno UIによって提供されるクライアント側の控えめな検証が可能になり、サーバー側の検証を実装できます。ModelState

したがって、コントローラーアクションでこれを行うと、サーバー側の検証が処理されます

If(ModelState.IsValid)
{
   //Write to the Database
}
else
{
   //We Have Validation Error, return the model for correction
}

ここにいくつかの例があります

[Required]
[DataType.Currency]
public decimal Currency { get; set; }

これは、通貨フィールドが必要であることをグリッドに通知しますが(明らかに)、それよりもさらにクールなものは、編集時に通貨テキストボックスを自動的にレンダリングします。

日付と時刻についても同じことを行うため、日付ピッカーがレンダリングされます

[Required]
[DataType.Date]
public decimal Date { get; set; }

サーバー側の検証エラーを表示するには、次のことを試してください。

エラーのキーはフィールドの名前を保持します。これを使用して、エラーのプロパティ名を含むメッセージを生成できます。

$.each(e.errors, function (key, value) {
    if ('errors' in value) {
        message += key + ":\n";
        $.each(value.errors, function () {
            message += this + "\n";
        });
    }
});
于 2012-11-06T16:50:04.307 に答える