10

System.Web.Helpers.Json.Encode()モデルにプロパティが含まれている場合、ASP.NET MVC によって生成される JavaScript に問題がありDateTimeます。

私のモデル:

public class MyViewModel
{
    public string MyString { get; set; }
    public DateTime MyDateTime { get; set; }
    public int MyInt { get; set; }
    public string[] MyStringArray { get; set; }
}

私のコントローラー:

public ActionResult Index()
{
    var myViewModel = new MyViewModel();
    myViewModel.MyString = "My test string";
    myViewModel.MyInt = 100;
    myViewModel.MyDateTime = DateTime.Now;
    myViewModel.MyStringArray = new string[] { "string 1", "string 2" };

    return View(myViewModel);
}

私の見解:

<script type="text/javascript">

    var myViewModel = @Html.Raw(Json.Encode(Model)) ;

</script>

出力:

<script type="text/javascript">

    var myViewModel = {"MyString":"My test string","MyDateTime":"\/Date(1372280916431)\/","MyInt":100,"MyStringArray":["string 1","string 2"]} ;

</script>

問題は、日付のエンコード方法にあります。これは文字列であり、日付型ではありません。

私も使用してみNewtonsoft.Json.JsonConvert.SerializeObject()ましたが、まだ日付型ではなく文字列を取得しています。

4

6 に答える 6

2

これらの回答からインスピレーションを得て、null 許容日付を MVC コントローラーに渡し、モデルを正しくバインドする必要がありました。これは私が着陸した場所です:

  var dob = @Html.Raw(Json.Encode(Model.BirthDate.HasValue ? Model.BirthDate.Value.ToShortDateString() : null));
于 2014-09-11T17:42:37.483 に答える
2

Newtonsoft を使用してオブジェクトをエンコードすると、ISO 形式の日付になります。

@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model))

日付形式:

0001-01-01T00:00:00
于 2020-02-24T17:05:04.130 に答える
1

使用できます

var myDate = new Date(parseInt('@Html.Raw(Json.Encode(Model.MyDateTime))'.substr(6)));

また

var myDate = new Date(parseInt('@Html.Raw(Json.Encode(Model.MyDateTime))'.replace('/Date(', '')));

どちらも「/Date(」部分を無視し、「parseInt」を使用すると、最後の「)/」部分を無視します。次に、ミリ秒から日付オブジェクトを取得します。

ただし、Date() オブジェクトを作成すると、ブラウザの GMT 時間に従って作成されることを忘れないでください。

JavaScript コードでこの Date() オブジェクトを使用する場合、次のような UTC Date メソッドを常に使用します。myDate.getUTCHours();

于 2013-09-23T13:52:35.330 に答える
0

Forloop.HtmlHelpers nuget パッケージを使用すると、AddScriptBlock HtmlHelper 拡張機能を取得し、スクリプトで変数を設定する Newtonsoft 呼び出しで次のようなことを行うことができます。

@{
using (var context = Html.BeginScriptContext())
{
    Html.AddScriptBlock(@"
$(function () {
        var data = " + JsonConvert.SerializeObject( Model.Data ) + @";
        ///continue processing ...
});");
}

}

于 2014-02-08T11:10:12.407 に答える