2010-08-06 2 views
0

현재 현재 "Web 1.0"코드를 현재 표준을 만족하도록 변환 중입니다.ASP/VB.NET에서 클라이언트 측 스크립트 생성/등록

StringBuilder에 과다한 행을 추가 한 다음 ClientScript.RegisterStartupScript(Me.GetType(), "startUpScript", strScript)을 통해 페이지에 등록하는 것 이외의 클라이언트 측 스크립트를 생성하고 추가하는 더 좋은 방법이 있습니까?

이 모든 것을 글로벌 .js 파일에 넣는 것 외에 다른 방법으로이 예제를 개선 할 수 있습니까? 이것을 주 .js 파일에 포함시키는 것이 "모범 사례"대안이라면 왜 그럴까요?

Dim lsbScript As New Text.StringBuilder 

    lsbScript.Append(vbCrLf) 
    lsbScript.Append("<script language=""javascript>""" & vbCrLf) 
    lsbScript.Append("<!--" & vbCrLf) 

    ... 

    lsbScript.Append("//-->" & vbCrLf) 
    lsbScript.Append("</SCRIPT>" & vbCrLf) 


    If Not ClientScript.IsStartupScriptRegistered("someScript") Then 
     ClientScript.RegisterStartupScript(Me.GetType(), "someScript", lsbScript.ToString) 
    End If 

답변

1

좋은 중간지면은 스크립트 내용을 새 js 파일로 오프로드 할 수 있으며 codebehind의 스크립트 노드를 포함 할 수 있습니다.

protected void Page_Load(object sender, EventArgs e) { 

    bool someCondition = Whatever(); 
    if (someCondition) 
    { 
     System.Web.UI.HtmlControls.HtmlGenericControl script; 
     script = new System.Web.UI.HtmlControls.HtmlGenericControl("script"); 
     script.Attributes["src"] = "myscript.js"; 
     this.Controls.Add(script); 
    } 
} 

이렇게하면 페이지 끝의 노드가 삭제됩니다. 또는 페이지에서 원하는 위치에 자리 표시 자 컨트롤을 추가하고 새 HtmlGenericControl을 추가 할 수 있습니다.

(죄송합니다, VB는 제 모국어가 아닙니다.)

0

예 .js 파일을 프로젝트에 포함 할 수 있습니다. 서버 컨트롤의 네임 스페이스 위에

을 common.js를 (또는 당신이 그것을 필요 whereever) :이 예를 들어 임베디드 자원

에 (오른쪽 프로젝트 탐색기에서 파일을 클릭) 빌드 작업의 설정

[assembly: System.Web.UI.WebResource(
    "MyFullNameSpace.Common.js", 
     "text/javascript", PerformSubstitution = true)] 

OnPreRender 이벤트 :

if (!Page.ClientScript.IsClientScriptIncludeRegistered("Common")) 
       { 
        string url = Page.ClientScript.GetWebResourceUrl(this.GetType(), "MyFullNameSpace.Common.js"); 
        Page.ClientScript.RegisterClientScriptInclude("Common", url); 
       } 

위치의 .js 곳의 완전하고 정확한 네임 스페이스 MyFullNameSpace를 대체하는 조심하십시오. 그것은 아마 작동하지 않는 경우. NET에서 그것을 찾을 수 없다. 그리고 반사경을 사용하여 dll을 열고 .js를 임베디드 리소스로 찾을 수 있으므로 정확한 네임 스페이스를 알 수있다.

나는 항상 이렇게한다. 서버 컨트롤하지만 이미지뿐만 아니라 웹 애플 리케이션 프로젝트에서 할 수 있습니다.

+0

프로젝트에 .js 파일을 추가 할 수 있다는 것을 잘 알고 있습니다. 그것은 우리의 .js 파일이 이미 다른 함수들로 가득 차 있기 때문에 페이지 (특정 조건 하에서)가 필요할 경우에만 스크립트를 페이지에 동적으로 추가 할 수있는 대안을 찾고 있습니다. – danyim

+0

그래서 serveral .js 파일을 만들고 필요한 경우에만 등록하십시오. 코드에서 .js 파일의 함수에 매개 변수를 전달할 수 있습니다. – Jeroen

0

vbCrLf을 연결하는 대신 AppendLine()을 사용하면 약간의 마일리지가 발생할 수 있습니다.

+0

팁 주셔서 감사. 이전 코드를 복사하여 붙여 넣기 만했습니다. – danyim