web-dev-qa-db-ja.com

JavaScript asp .net mvc razorのアクセスモデル

私は、かみそりで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';

        }
    });

しかし、何も機能しません。モデルが未定義エラーです

14
SARAVAN

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の違いを認識し、サーバー側のコードが削除されてからずっと後に実行されます。

46
David