2

こんにちは私は剣道グリッドを使用して価格表を編集しています。

テーブル内の単一の値を編集しようとしています:

@(Html.Kendo().Grid(Model).Name("PriceList")
    .Columns(columns =>
    {
        columns.Bound(p => p.Id).Hidden();
        columns.Bound(p => p.Name);
        columns.Bound(p => p.ValidFrom).Format("{0:dd.MM.yyyy h:mm:ss}");
        columns.Bound(p => p.ValidTill).Format("{0:dd.MM.yyyy h:mm:ss}");
        columns.Bound(p => p.Created).Format("{0:dd.MM.yyyy h:mm:ss}");
        columns.Bound(p => p.UserName);
        columns.Bound(p => p.FilePath);
        columns.Command(command => { command.Edit(); command.Destroy(); });
    })
    .DataSource(dataSource => dataSource.Ajax()
            .Model(model =>
            {
                model.Id(p => p.Id);
                model.Field(p => p.ValidFrom).Editable(false);
                model.Field(p => p.ValidTill).Editable(true);
                model.Field(p => p.Created).Editable(false);
                model.Field(p => p.UserName).Editable(false);
                model.Field(p => p.FilePath).Editable(false);
                model.Field(p => p.Name).Editable(false);
        })
        .Read("PriceList_Read", "Admin")       
        .Destroy("PriceList_Editing_Destroy", "Admin")
        .Update(update=>update.Action("PriceList_Editing_Update", "Admin"))
        .Events(e=>e.Error("error_handler"))
    )   
    .Editable(editable => editable.Mode(GridEditMode.InLine))
    .AutoBind(true)
)

そして、グリッド内の編集された値をコントローラーに渡すのに問題があります。

public ActionResult PriceList_Editing_Update([DataSourceRequest] DataSourceRequest request, PriceListViewModel model)
        {

                    int Id = model.Id;
                    string Name = model.Name;
                    DateTime date = model.ValidTill; // 0001 00:00:00 value all the time

            return View("Index", GetViewResult());
        }

私は常に空の日時値を返しています(空の意味です{1. 1. 0001 0:00:00})同じ問題は、DateTimeプロパティ(CreatedとValidFrom)を使用する他の2つの列にあります。残りの値は正しくポストバックされます。を使用してこれらの値を取得しようとしましたがstring DateTillStr = Request.Params["ValidTill"];、firebugでGETを確認すると、グリッドがリクエスト内でこの値を返送していないことがわかります。モデルオブジェクトの日時以外の値のみが送信されます。このような:

Actual  false
FilePath    D:\Projects\CPSkla\CPSkla\App_Data\Cen°k 2012_10.xlsx
Id  23
Name    Testovací ceník
User    0
User1   null
UserName    djezek

モデルから残りの4つが欠落しているのは、これらの7つの属性だけです。

public partial class PriceListView
{
    public int Id { get; set; }
    public int User { get; set; }
    public string Name { get; set; }
    public System.DateTime ValidFrom { get; set; }
    public System.DateTime ValidTill { get; set; }
    public string FilePath { get; set; }
    public Nullable<System.DateTime> Created { get; set; }
    public Nullable<System.DateTime> Updated { get; set; }
    public bool Actual { get; set; }
    public string UserName { get; set; }
}

これらのデータをポストバックする他の方法はありますか?更新リクエストに追加のデータを添付できることはわかりましたが、JavaScript関数でテーブル内の編集された行を識別する方法に問題がありました(選択された値を識別する方法は知っていますが、編集されていません)。

剣道グリッド内のカレンダーピッカーが、選択した値を実際には日付値を保持するために割り当てられた入力に入れていないことを、firebugを使用して理解しました。何かご意見は?

4

2 に答える 2

1

グリッドの保存イベントを使用すると、入力フィールド、モデル (dataItem)、および入力要素のコンテナーのように使用される HTML 要素から収集された実際の値を確認できます。

また、追加の値を送信する場合 (または、問題のあるフィールドを別の方法で送信する場合は、更新構成のデータ関数を使用します)。

于 2012-10-21T18:26:47.950 に答える
1

私の記憶が正しければ、これは日付と時刻に関する文化の問題であり、Kendo UI に固有のものではなく、ASP.NET MVC に固有のものであると思います。

したがって、たとえば、予期される日付形式文字列が mm/dd/yyyy で、日付が dd/mm/yyyy の場合、null 日付値 (0001 00:00:00) が返されます。

このSOの質問を参照してください

日付形式が正しくない MVC DateTime バインディング

お役に立てれば

于 2012-11-06T17:07:00.790 に答える