2012-02-11 6 views
0

MVC 3 앱에서 CKeditor를 사용하고 있습니다.CKEditor 컨트롤러에 원시 데이터

는 지금 내가 DB에 HTML 태그로 텍스트를 저장할 필요 오전, 문제는 Ckeditors GetData의() 메소드는 데이터의 원시 형식 (http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#getData)

내가 정상이 RAW 형식을 만들 수있는 방법이 필요를 반환 editor_data이 정상으로 설정되어 있으면

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>TextEditionViewModel</legend> 


     @Html.DropDownListFor(model=>model.Id, Model.Texts) 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.Text) 
     </div> 
     <div class="editor-field"> 

      @Html.TextAreaFor((model => model.Text), new { @Id = "editor1" }) 
      @Html.ValidationMessageFor(model => model.Text) 
     </div> 

     <script type="text/javascript"> 
      CKEDITOR.replace('editor1'); 
      </script> 


     <script type="text/javascript"> 

      var editor_data = CKEDITOR.instances['editor1'].getData(); 
      var url = '@Url.Action("EditText1", "Admin")'; 
      var data = { CommentText: editor_data }; 

      function Save() { 
       alert(editor_data); 
       $.post(url, { CommentText: editor_data }, function (result) { 

       }); 

      }; 

      $('#Id').change(function() { 
       var selectedText = $(this).val(); 
       if (selectedText != null && selectedText != '') { 
        $.getJSON('@Url.Action("Text","Admin")', { Id: selectedText }, function (text) { 
         CKEDITOR.instances['editor1'].setData(text); 

        }); 

       } 
      }); 
</script> 
    </fieldset> 
    <p> 
      <input type="button" value="Save" onclick="Save()"/> 
     </p> 
} 

는 "텍스트"문자열의 모든 작품 :

보기 HTML 태그와 캐릭터!

컨트롤러

public ActionResult EditText1(String CommentText) 
    { 

     return null; 
    } 

답변

1

당신은 기본적으로 ASP.NET의 승인을받지 않은 HTML 태그 게시 수 있도록 [ValidateInput] 속성 컨트롤러 액션을 장식 수 :

[HttpPost] 
[ValidateInput(false)] 
public ActionResult EditText1(string commentText) 
{ 
    return null; 
} 

을 업데이트 :

이 문제는 Save 메서드에서 editor_data 변수에 액세스 할 수 없다는 사실과 관련이 있습니다.

이 작업을 수행 할 수 있습니다 :

<script type="text/javascript"> 
    function Save() { 
     var editor_data = CKEDITOR.instances['editor1'].getData(); 
     var url = '@Url.Action("EditText1", "Admin")'; 
     var data = { CommentText: editor_data }; 
     $.post(url, data, function (result) { 

     }); 
    } 

    ... 
</script> 
+0

문제는 내가 경고 (editor_data)를 말한다면, 팝업 반환 ""내가 (. CKEDITOR.instances [ 'editor1'] GetData의())를 경고하는 경우이다 는 올바른 문자열을 반환하지만 컨트롤러의 commentText는 여전히 비어 있습니다. 문제는 원시 형식입니다. – Timsen

+0

@Timsen은 비동기 적으로 실행되는'EditText1' 컨트롤러 동작입니까 아니면 일반적인 형식의 submit입니까? 기본 동작을 피하기 위해'onclick' 핸들러에서 false를 반환 해 볼 수 있습니다. –

+0

컨트롤러 동작을 호출하는 버튼입니다. editor_data를 Normal "Text"문자열로 설정하면 모든 것이 정상적으로 작동합니다. 거짓 onclick을 반환하는 방법은 무엇입니까? – Timsen