この行は、Visual Studio 2012の構文エラーを示しています(文字通り「構文エラー」):
_var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));
_
この場合のModel
は、cshtmlの先頭で宣言された_@model MyApp.ViewModels.MyViewModel
_のインスタンスです。
私のモデルはデータ変数に適切にシリアル化され、アプリケーションは正しく動作します。表面的には、エラーリストに永続的にエラーがあるとうっとうしいだけです。
コンパイラーが満足するように行を変更するにはどうすればよいですか?
編集:
要求に応じて、より多くのコンテキスト。 $(document).ready()
全体は次のとおりです。
_<script type="text/javascript">
$(document).ready(function () {
$('#ReportDate').datepicker();
$('#DispositionDate').datepicker();
var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));
var vm = new NonconformingProductViewModel(data);
ko.applyBindingsWithValidation(vm);
// validate on page load so all reqd fields are highlighted.
var valid = ko.validation.group(vm, {deep: true});
valid.showAllMessages(true);
}); // end document.ready
</script>
_
入力引数を返す単純なJavaScript set
関数を実装します。
function set(value){
return value;
}
この関数を使用して、Razorモデル値をJavaScript変数に割り当てます。
var data = set(@Json.Encode(Model));
オプションとして、自己呼び出し機能を使用できます。
var data = function() { return set(@Json.Encode(Model)); }();
次のようにfunction
内にラップしてみてください。
var data = function() { return @Html.Raw(Json.Encode(Model)); }();
JavaScript-SerializerまたはDataContractJsonSerializerの代わりに JSON.Net を使用して、 JSON Datesである悪夢 を回避します。
var data = function () {
return @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)); }();
さらに簡単!!これにより、その小さな煩わしさが解消されます。
var model = [@Html.Raw(Json.Encode(Model))][0];
基本的にインテリセンスは@Html.Raw
。実際には何も問題はありませんが、インテリセンスの欠点を処理する必要があります。ここでは、結果を新しい配列の最初のインデックスとして宣言し、最初のインデックスを返します。
参考:モデルにDOMへの変更を反映させたい場合は、 JSModel クラスを試してください。
新しいjavascript関数を記述する必要はありません。コードを角かっこで囲むだけです
var data = (@Html.Raw(Json.Encode(Model)));
visual Studio 2015で私のために働く、VS2012についてはわからない