답변 내용
1) .cshtml
파일 에서 Javascript / Jquery 코드 블록으로 모델 데이터에 액세스하는 방법
2) .js
파일 에서 Javascript / Jquery 코드 블록으로 모델 데이터에 액세스하는 방법
.cshtml
파일 에서 Javascript / Jquery 코드 블록으로 모델 데이터에 액세스하는 방법
Model
JavaScript 변수에 대한 두 가지 유형의 c # 변수 ( )가 있습니다.
- 속성 할당 - 기본 데이터 유형이 좋아하는
int
, string
, DateTime
(예 : Model.Name
)
- 객체 할당 -사용자 정의 또는 내장 클래스 (예 :
Model
, Model.UserSettingsObj
)
이 두 과제의 세부 사항을 살펴 보겠습니다.
나머지 답변은 아래 AppUser
모델을 예로 들어 보겠습니다.
public class AppUser
{
public string Name { get; set; }
public bool IsAuthenticated { get; set; }
public DateTime LoginDateTime { get; set; }
public int Age { get; set; }
public string UserIconHTML { get; set; }
}
이 모델에 할당 한 값은
AppUser appUser = new AppUser
{
Name = "Raj",
IsAuthenticated = true,
LoginDateTime = DateTime.Now,
Age = 26,
UserIconHTML = "<i class='fa fa-users'></i>"
};
부동산 할당
할당에 다른 구문을 사용하고 결과를 관찰 할 수 있습니다.
1) 속성 할당을 따옴표로 묶지 않고.
var Name = @Model.Name;
var Age = @Model.Age;
var LoginTime = @Model.LoginDateTime;
var IsAuthenticated = @Model.IsAuthenticated;
var IconHtml = @Model.UserIconHTML;
당신이 볼 수 있듯이 오류의 부부가, Raj
그리고 True
그들이 그 존재 해달라고하기 때문에 자바 스크립트 변수로 간주되어 variable undefined
오류가 발생했습니다. dateTime varialble 오류는 unexpected number
숫자에 특수 문자를 사용할 수 없다는 점에서 HTML 태그는 엔티티 이름으로 변환되어 브라우저가 값과 HTML 마크 업을 혼합하지 않습니다.
2) 따옴표로 묶는 속성 할당.
var Name = '@Model.Name';
var Age = '@Model.Age';
var LoginTime = '@Model.LoginDateTime';
var IsAuthenticated = '@Model.IsAuthenticated';
var IconHtml = '@Model.UserIconHTML';
결과는 유효하므로 속성 할당을 따옴표로 묶으면 유효한 구문이 제공됩니다. 그러나 숫자 Age
는 이제 문자열이므로 참고를 원하지 않으면 따옴표를 제거하면 숫자 유형으로 렌더링됩니다.
3)@Html.Raw
따옴표로 묶지 않고 사용
var Name = @Html.Raw(Model.Name);
var Age = @Html.Raw(Model.Age);
var LoginTime = @Html.Raw(Model.LoginDateTime);
var IsAuthenticated = @Html.Raw(Model.IsAuthenticated);
var IconHtml = @Html.Raw(Model.UserIconHTML);
결과는 테스트 사례 1과 비슷합니다. 그러나 문자열을 사용 @Html.Raw()
하면 HTML
약간의 변화가 나타났습니다. 엔티티 이름으로 변경하지 않고 HTML이 유지됩니다.
문서에서 Html.Raw ()
HTML 마크 업을 HTML 마크 업으로 해석하도록 HTML 태그를 HtmlString 인스턴스에 래핑합니다.
그러나 여전히 다른 줄에 오류가 있습니다.
4)@Html.Raw
인용 부호로 사용 및 포장
var Name ='@Html.Raw(Model.Name)';
var Age = '@Html.Raw(Model.Age)';
var LoginTime = '@Html.Raw(Model.LoginDateTime)';
var IsAuthenticated = '@Html.Raw(Model.IsAuthenticated)';
var IconHtml = '@Html.Raw(Model.UserIconHTML)';
결과는 모든 유형에 적합합니다. 그러나 HTML
이제 데이터가 손상되어 스크립트가 중단됩니다. 작은 따옴표 '
를 사용 하여 데이터를 래핑하고 데이터에도 작은 따옴표가 있기 때문에 문제가 발생 합니다.
우리는 두 가지 접근 방식으로이 문제를 극복 할 수 있습니다.
1) 큰 따옴표 " "
를 사용 하여 HTML 부분을 줄 바꿈하십시오. 내부 데이터에는 작은 따옴표 만 있습니다. (큰 따옴표로 묶은 후에 "
는 데이터 내에 도 포함되어 있지 않아야 함 )
var IconHtml = "@Html.Raw(Model.UserIconHTML)";
2) 서버 측 코드에서 문자 의미를 피하십시오. 처럼
UserIconHTML = "<i class=\"fa fa-users\"></i>"
재산 할당의 결론
- 숫자가 아닌 dataType에는 따옴표를 사용하십시오.
- 숫자 dataType에 따옴표를 사용하지 마십시오.
Html.Raw
HTML 데이터를 그대로 해석하는 데 사용하십시오 .
- HTML 데이터를 관리하여 서버 측에서 따옴표 의미를 이스케이프하거나 javascript 변수에 지정하는 동안 데이터와 다른 따옴표를 사용하십시오.
객체 할당
할당에 다른 구문을 사용하고 결과를 관찰 할 수 있습니다.
1) 객체 할당을 따옴표로 묶지 않습니다.
var userObj = @Model;
ac # 객체를 javascript 변수에 할당하면 해당 객체의 값 .ToString()
이 할당됩니다. 따라서 위의 결과입니다.
2 인용 부호로 객체 할당
var userObj = '@Model';
3)Html.Raw
따옴표없이 사용 .
var userObj = @Html.Raw(Model);
4)Html.Raw
따옴표와 함께 사용
var userObj = '@Html.Raw(Model)';
는 Html.Raw
변수에 객체를 할당하는 동안 우리를 위해 더 많이 사용했다.
5)Json.Encode()
따옴표없이 사용
var userObj = @Json.Encode(Model);
//result is like
var userObj = {"Name":"Raj",
"IsAuthenticated":true,
"LoginDateTime":"\/Date(1482572875150)\/",
"Age":26,
"UserIconHTML":"\u003ci class=\"fa fa-users\"\u003e\u003c/i\u003e"
};
우리는 약간의 변화를 보았습니다. 모델이 객체로 해석되는 것을 봅니다. 그러나 특수 문자가로 변경되었습니다 entity names
. 또한 위의 구문을 따옴표로 묶는 것은별로 쓸모가 없습니다. 우리는 단순히 따옴표 안에 동일한 결과를 얻습니다.
Json.Encode () 의 문서에서
데이터 오브젝트를 JSON (JavaScript Object Notation) 형식의 문자열로 변환합니다.
entity Name
속성 할당과 관련하여 이미이 문제 가 발생 했음을 기억하는 경우를 사용 하여이 문제를 극복했습니다 Html.Raw
. 따라서 시도해보십시오. 결합 Html.Raw
하고Json.Encode
6) 따옴표를 사용 Html.Raw
하거나 사용 Json.Encode
하지 않습니다.
var userObj = @Html.Raw(Json.Encode(Model));
결과는 유효한 Javascript 객체입니다
var userObj = {"Name":"Raj",
"IsAuthenticated":true,
"LoginDateTime":"\/Date(1482573224421)\/",
"Age":26,
"UserIconHTML":"\u003ci class=\"fa fa-users\"\u003e\u003c/i\u003e"
};
7) 사용 Html.Raw
및 Json.Encode
따옴표 안에.
var userObj = '@Html.Raw(Json.Encode(Model))';
따옴표로 줄 바꿈하면 JSON 데이터가 제공 됩니다.
객체 할당에 대한 결론
- 자바 스크립트 변수에 자바 스크립트 객체 로 객체를 할당 하려면
Html.Raw
및 조합 Json.Encode
을 사용 합니다 .
- JSON 을 얻기 위해 그것을 사용
Html.Raw
하고 Json.Encode
감싸십시오.quotes
참고 : DataTime 데이터 형식이 올바르지 않은 경우. 앞서 말했듯이 Converts a data object to a string that is in the JavaScript Object Notation (JSON) format
JSON에는 date
유형이 포함되어 있지 않기 때문 입니다. 이 문제를 해결하는 다른 옵션은 javascipt Date () 객체를 사용하여이 유형 만 처리하도록 다른 코드 줄을 추가하는 것입니다.
var userObj.LoginDateTime = new Date('@Html.Raw(Model.LoginDateTime)');
//without Json.Encode
.js
파일 에서 Javascript / Jquery 코드 블록으로 모델 데이터에 액세스하는 방법
면도기 구문은 .js
파일 에서 의미가 없으므로 모델을 .js
파일로 직접 사용할 수 없습니다 . 그러나 해결 방법이 있습니다.
1) 솔루션은 javascript 전역 변수를 사용하고 있습니다.
전역 범위의 javascipt 변수에 값을 할당 한 다음이 변수를 사용자 .cshtml
및 .js
파일 의 모든 코드 블록 내에서 사용해야 합니다. 문법은
<script type="text/javascript">
var userObj = @Html.Raw(Json.Encode(Model)); //For javascript object
var userJsonObj = '@Html.Raw(Json.Encode(Model))'; //For json data
</script>
대신에 우리는 변수를 사용할 수 있습니다이와 userObj
와 userJsonObj
같은 필요할 때.
참고 : 유지 관리가 매우 어려워서 개인적으로 전역 변수를 사용하지 않는 것이 좋습니다. 그러나 다른 옵션이 없다면 적절한 이름 지정 규칙을 사용하여 사용할 수 있습니다 userAppDetails_global
.
2) function () 또는 함수를 사용 closure
하여 모델 데이터에 의존하는 모든 코드를 래핑하십시오. 그런 다음 .cshtml
파일 에서이 기능을 실행 하십시오.
external.js
function userDataDependent(userObj){
//.... related code
}
.cshtml
파일
<script type="text/javascript">
userDataDependent(@Html.Raw(Json.Encode(Model))); //execute the function
</script>
참고 : 위 스크립트 전에 외부 파일을 참조해야합니다. 그렇지 않으면 userDataDependent
함수가 정의되지 않았습니다.
또한 함수도 전체 범위 내에 있어야합니다. 두 가지 솔루션 모두 글로벌 범위의 플레이어를 처리해야합니다.