3

ノックアウト/mvc3 アプリケーションがあります。日付をコントローラーに戻しています。

コントローラ

public ActionResult PackageUpdate(Package updatePackage){
\\do some stuff but dates are set to zero?
}

ビュー モデルと保存方法

var Package = function (data) {
    self = this;
    self = ko.mapping.fromJS(data);
    self.save = function(){
        $.ajax({
            url: '/MediaSchedule/PackageUpdate', 
            data:ko.toJSON({ updatePackage: self })
        }).success(function (results) {
            console.log(results);
        }).error(function (er) { 
            console.error('Ah damn you broke it.')
            console.log(er);
        });
    }
    return self;
}

Json が渡されます。

{"updatePackage":{"Id":"82e3bc7e-27b8-49c2-b1fa-1ee2ebffbe66","Name":"28a38","SecondaryName":"è€å­æˆ‘è¦é’±","IsLocked":true},"DateCreated":"/Date(1357650000000+1100)/","DateStart":"/Date(1365080400000+1100)/","DateEnd":"/Date(1365516000000+1000)/"}

ID、名前、その他のプロパティは取得されていますが、日付は {1/1/0001 12:00:00 AM} にリセットされています。私の仮定は、デシリアライズされていないため、最小日付を設定しているためです。質問: 日付を正しくデシリアライズするにはどうすればよいですか?

4

3 に答える 3

1

updatePackage オブジェクトにプッシュするデータ型だけだと思います。以下は私のコードで、うまく動作します。jQuery Datepicker から日付を読み取り、「dd MM, yy」の形式を使用します (2013 年 1 月 1 日)

 var iEndInsuredDate = $('#dpkEndInsuredDate').val();
            var iEndPolicyDate = $('#dpkEndPolicyDate').val();

            $.ajax({
                url: '@Url.Action("DeleteClientMember", "ClientMember")',
                type: "POST",
                dataType: "json",
                data: { clientMemberID: id, endInsuredDate: iEndInsuredDate, endPolicyDate: iEndPolicyDate },
                success: function (result) {
                    ShowWaiting("Reloading...");
                    Search(1);
                }
            });

そして私のActionResult

public ActionResult DeleteClientMember(int clientMemberID, DateTime? endInsuredDate, DateTime? endPolicyDate)
    {
        ClientMember model = clientMemberService.GetById(clientMemberID);

        //model.EndPolicyDate = endPolicyDate;
        model.EndInsuredDate = endInsuredDate;
        foreach (ClientMemberProduct item in model.ProductList)
        {
            item.EndDate = endInsuredDate;
        }
        model.IsActive = false;
        model.ActionStatus = ClientMemberActionStatus.PendingDelete.ToString();
        clientMemberService.CalculateInsFee(model);
        clientMemberService.Update(model);
        return null;
    }

これが役立つことを願っています

于 2013-04-03T05:29:07.213 に答える
1

Matt Johnsonのおかげで、日付がブラウザに送信される方法を変更することができました。ASP.NET MVC JsonResult Date Formatの同様の問題に対する Perishable Dave の回答から得られた比較的簡単な修正でした。

私の JsonNetResult クラスは次のようになります

public class JsonNetResult : ActionResult
{
    private const string _dateFormat = "yyyy-MM-dd hh:mm:ss";

    public Encoding ContentEncoding { get; set; }
    public string ContentType { get; set; }
    public object Data { get; set; }

    public JsonSerializerSettings SerializerSettings { get; set; }
    public Formatting Formatting { get; set; }

    public JsonNetResult()
    {
        SerializerSettings = new JsonSerializerSettings();
        Formatting = Formatting.Indented;
        SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
            throw new ArgumentNullException("context");

        HttpResponseBase response = context.HttpContext.Response;

        response.ContentType = !string.IsNullOrEmpty(ContentType)
          ? ContentType
          : "application/json";

        if (ContentEncoding != null)
            response.ContentEncoding = ContentEncoding;

        if (Data != null)
        {
            var isoConvert = new IsoDateTimeConverter();
            isoConvert.DateTimeFormat = _dateFormat;

            JsonTextWriter writer = new JsonTextWriter(response.Output) { Formatting = Formatting };

            JsonSerializer serializer = JsonSerializer.Create(SerializerSettings);
            serializer.Converters.Add(isoConvert);

            serializer.Serialize(writer, Data);

            writer.Flush();
        }
    }
}

私はserizerにiso日付コンバーターを追加しました

コントローラーでは、次の方法で呼び出します。

public JsonNetResult YourAction(){
    //your logic here
    return JsonNetResult(/*your object here*/);
}

これを書いたとき、私は Web API について知りませんでした。オブジェクトのシリアル化に関しては、多くの面倒な作業が行われるため、一見の価値があります。ASP.NET Web API 2 の概要

于 2013-04-03T23:24:42.980 に答える