하지만, C# 에선?
cs 단에 있는 변수의 값을 써봐야 오류만 뜬다.
사실 해결책은 간단한데....
그냥 변수를 public 으로 선언하고 쓰면 된다.
그러면 <%=printTitle%> 이런식으로 쓸수가 있다.
하지만, 이것도 문제가 있는 것이, postback 이 일어나면 변수가 초기화 되어 버리는 문제가 있다.
그래서 일반적으로는 ViewState 에 저장하고 사용한다.
public string UserName { set { ViewState["userName"] = value; } get { try { return ViewState["userName"].ToString(); } catch { return "사용자"; } } } protected void Page_Load(object sender, EventArgs e) { UserName = "관리자"; }
이렇게 ViewState 에 저장해 놓으면 html 단에서 <%=UserName%> 이렇게 써도 된다.
... 하지만...
만약 이렇게 ViewState 에 저장하기가 귀찮다면?
크게 2가지 방법이 있는데, 첫번째는 postback 때문에 문제가 생기지 않도록 알아서 잘 만드는거고...
page_Load() 에서 계속 값을 입력해 준다던지...
두번째는 <Literal /> 태그를 이용하는 방법이 있다.
<Literal> 태그는 말그대로 "문자 그대로의", "직역" 이라는 뜻 답게, 그냥 그대로 지정된 문자열을 표현해 준다.
쉽게 말해 <label:asp> 태그 같은 다른 태그들은 Html 로 파싱될때 <span>, <div>, <input> 같은 대응 되는 Html 태그들로 변화 되지만, <Literal> 태그는 지정한 값을 그대로 문자열로 Html 상에 표시한다.
그렇기 때문에 원하는 위치에 <Literal:asp runat="server" id="setVal" /> 이런식으로 쓰고 서버 단에서 setVal = "XXX"; 이런식으로 쓰면 <Literal> 태그 자리에 "XXX" 라는 문자열이 그대로 찍히게 된다.
그리고 .Net 태그 이기 때문에 자동으로 ViewState 에 저장되므로, 별도로 초기화라도 하지 않는 이상 Postback 이 일어나도 값이 그대로 유지된다.
말하자면, 어차피 서버사이드 태그들은 자동으로 ViewState 에 저장되니, 사실상 처음에 소개한 방법과 거의 차이가 없는 셈이다.
단지, 직접 변수를 선언해 쓰느냐, 제공해 준 태그를 쓰느냐 하는 차이 정도 뿐.
사실 쓰기에는 <Literal> 을 쓰는게 더 편리하지만, 가독성 측면에는 변수를 지정해 쓰는게 좀더 낫다.
예를 들자면.
<input Type="Text" value="<Literal:asp runat="server" id="setVal" />">보다는
<input Type="Text" value="<%=setVal%>">
가 더 알아보기 쉬우니까.
게다가 한군데가 아닌 여러군데 사용되는 값의 경우라면 Public 변수를 쓰는것이 낫다.
물론 둘다 동작하는 코드 이니, 편한쪽을 쓰면된다.