私は、かみそりでasp .net mvcプロジェクトに取り組んでいます。
次のようにjavascriptでモデルにアクセスしようとしています
alert(Model.SecurityProfile); alert(model.SecurityProfile); alert(@ Model.SecurityProfile); alert(@ model.SecurityProfile);
var SecurityProfileViewModel = { ViewModel:model、 Id:SecurityProfileId、 ProfileId:$( '#ProfileId')。val()、 JobTitleId:$( '#JobTitle')。val()、 SecurityProfileTypeId:$( '#SecurityProfileType')。val()、 Status:$( '#ddlStatus')。val()、 理由:$( '#txtReason')。val()、 モード:$( '#hidMode')。val() };
$.ajax({
url: '/SecurityProfile/Edit',
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify(SecurityProfileViewModel),
success: function (data) {
alert(data);
window.location.href = '/SecurityProfile/Index';
}
});
しかし、何も機能しません。モデルが未定義エラーです
JavaScriptに関する限り、model
は未定義です。ビューのサーバー側コードは、サーバー側で実行されます。 JavaScriptにはその概念がありません。それは、そのコードのクライアント側の出力のみに関係します。 kind of 2つを混在させることができますが、クライアント側の出力の一部となる文字列を出力するために、サーバー側のコンポーネントがそこにあることに注意する必要があります。
したがって、たとえば、モデルに次の名前のプロパティがある場合:
Model.SomeProperty
この場合、次のようにJavaScriptで直接使用することはできません。
alert(Model.SomeProperty)
// or
alert(SomeProperty)
これは、ビューエンジンにサーバー側コードがあることを伝えるために、かみそりのビュー構文を使用していません。これは構文的にはクライアント側のコードであり、Model
クライアント側はありません。そのため、実行するサーバー側の前処理があることを示す必要があります。
alert(@Model.SomeProperty)
さらに、SomeProperty
が文字列の場合、outputには引用符が含まれないことに注意してください。したがって、クライアント側のコードにもそれらを提供する必要があります。
alert('@Model.SomeProperty')
したがって、SomeProperty
のサーバー側の値は、クライアントにレンダリングされるときにここで発行されます。そのため、値が"Hello World"
その後、結果のクライアント側コードは次のようになります。
alert('Hello World')
主なことは、サーバー側コードとクライアント側コードの分離に留意することです。サーバー側のコードに関する限り、すべてのJavaScript/HTML/CSSは1つの大きな文字列です。ビューは基本的に、ブラウザに送信する大きな文字列を作成するだけです。ブラウザに表示されると、クライアント側のレンダリングはJavaScript/HTML/CSSの違いを認識し、サーバー側のコードが削除されてからずっと後に実行されます。