게시판 작업을 하나 할 것이 있어서.. 기존의 TextArea를 사용하는 것보다 좀 더 나은 방법을 사용하고 싶은 생각을 가지고 있던 차에 집에서 끄적대다가 발견.
1. FCKEditor 설치
ASP .NET MVC 모델로 Application을 작성하고, 자신이 생각하면 좋은 위치로 카피.
(여기서는 Scripts/fckeditor/ 폴더로 지정.)
설치가 다 되면 (설치위치)/_samples/default.html 로 들어가면 Sample web page가 다음과 같이 나오면 모든 설치는 완료.
2. ASP .NET MVC에서 FCKeditor의 사용
먼저 간단히 Editor를 표시해보기 위해서 다양한 방법들이 존재하는데, 기본적으로 ASP .NET MVC는 Page의 Fire & Forget 형태이기 때문에 javascript를 이용한 방법이 가장 좋다. (asp, jsp 등의 다양한 방법들이 있지만, MVC에서 사용하기에는 안좋아 보인다.)
1) FCKeditor의 javascript를 추가한다.
<script type="text/javascript" src="fckeditor/fckeditor.js"></script>
2) FCKeditor의 인스턴스를 생성한다.
<script type="text/javascript">
window.onload = function()
{
var oFCKeditor = new FCKeditor( 'MyTextarea' ) ;
oFCKeditor.BasePath = "/fckeditor/" ;
oFCKeditor.ReplaceTextarea() ;
}
</script>
3) textarea를 넣어주고, FCKeditor로 만들어준다.
<textarea id="MyTextarea" name="MyTextarea">This is <b>the</b> initial value.</textarea>
3. FCKeditor의 값 얻어오기
MVC에서 주로 사용되는 Form을 이용한 POST 방식으로 값을 얻어오는 것이 안되기 때문에 javascript를 이용해서 값을 얻어와야지 된다. POST를 이용해서 FormCollection을 이용하면 값이 넘어오지 않고 Action이 실행되지도 않는다.
<script type = "text/javascript" language = "javascript">"
var fckValue = FCKeditorAPI.GetInstance('name').GetHTML();
</script>
주로 사용되는 것이 FCKeditor의 Instance를 생성하고, 그 값을 얻어오는 반복작업을 줄이기 위해서 HtmlHelper class를 작성.
public static class FckEditorHelper
{
public static string FckTextBoxBase = "../../Scripts/fckeditor/";
public static string FckTextBox(this HtmlHelper u, string name)
{
return u.FckTextBox(name, null);
}
public static string FckTextBox(this HtmlHelper u, string name, object value)
{
return u.FckTextBox(name, value.ToString());
}
public static string FckTextBox(this HtmlHelper u, string name, string value)
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat(
"<textarea name=\"{0}\" id=\"{0}\" rows=\"50\" cols=\"80\" style=\"width:100%; height: 600px\">{1}</textarea>",
name, value);
sb.Append("<script type=\"text/javascript\" language=\"javascript\">");
sb.AppendFormat("var oFCKeditor = new FCKeditor('{0}');", name);
sb.AppendFormat("oFCKeditor.BasePath = '{0}';", FckTextBoxBase);
sb.Append("oFCKeditor.Height=400;");
sb.Append("oFCKeditor.ReplaceTextarea();");
sb.Append("</script>");
return sb.ToString();
}
public static string PrepareFckTextBox(this HtmlHelper u, string name)
{
StringBuilder sb = new StringBuilder("<script type = \"text/javascript\" language = \"javascript\">");
sb.AppendFormat("var fckValue = FCKeditorAPI.GetInstance('{0}').GetHTML();", name);
sb.Append("</script>");
return sb.ToString();
}
}
사용법은 다음과 같이 사용해주면 된다.
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<%=Html.FckTextBox("fckTextbox")%>
</asp:Content>
결과는 다음과 같다.