Проблемы с отправкой формы с помощью FCKEditor в MVC - PullRequest
0 голосов
/ 31 января 2011

У меня немного странная проблема с FCKEditor в моем проекте MVC.

По сути, у меня есть вид, который отображает частичное представление, содержащее мой FCKEditor (javascript, html и любые другие биты, чтобы сделать мой элемент управления повторно используемым через мое приложение)

Я звоню FCKEditor, выполняя следующее:

<script src="<%= Url.Content("~/Scripts/fckeditor/fckeditor.js") %>" type="text/javascript" ></script>
<script type="text/javascript">
window.onload = function () {
    var sBasePath = '<%= Url.Content("~/Scripts/fckeditor/") %>';

    var oFCKeditor = new FCKeditor('FckEditor1');
    oFCKeditor.BasePath = sBasePath;
    oFCKeditor.ReplaceTextarea();
}
</script>

Для проверки моей формы я использую jQuery.Validate со следующим кодом:

    //FORM VALIDATION
    $("#NewPageForm").validate({
        errorContainer: "#errorblock-div1, #errorblock-div2",
        errorLabelContainer: "#errorblock-div2 ul",
        wrapper: "li",
        rules: {
            titleTxt: "required",
            FckEditor1: "required"
        },
        messages: {
            titleTxt: "You must enter a page title.",
            FckEditor1: "You must enter at least some content."
        },
        submitHandler: function (form) {
            form.submit();
        }
    });

Локально, при отладке моего проекта, это работает абсолютно нормально и выдает ошибку пользователю, когда они оставляют редактор пустым.

Однако, когда я публикую приложение и запускаю его с сервера, всякий раз, когда в редакторе есть содержимое, форма не будет проверяться, сообщая мне, что мой элемент управления FCKEditor пуст, когда его явно нет.

Если я заберу валидацию и отправлю форму со всеми соответствующими полями, заполненными, коллекция collection("FckEditor1") также будет пустой, но, опять же, выполнение этого локально работает впервые, каждый раз.

У меня был поиск вокруг, и, похоже, происходит то, что моя текстовая область <%= Html.TextArea("FckEditor1", New With {.name = "FckEditor1", .class = "required"})%> не заполняется содержимым, введенным в FCKEditor, даже если это поле, с которым связан FCK.

Проблема существует во всех браузерах, которые я пробовал (IE8 и FF).

Не уверен, стоит ли также отметить, что FCK по-прежнему хорошо отрисовывается?

Я не совсем уверен, что это проблема с моим кодом, так как он отлично работает локально. Есть ли что-то, что мне нужно настроить на стороне сервера или в файле web.config, что может быть причиной этого?

Кто-нибудь еще сталкивался с этим или есть какие-либо идеи относительно того, как решить проблему?

EDIT

Я думаю, что мог бы быть там с исправлением.

Я добавил следующее:

    $('#publishBtn').button().click(function () {
        if (typeof (FCKeditorAPI) == "object") {

            FCKeditorAPI.GetInstance("FckEditor1").UpdateLinkedField();

        } else {
            alert('this is not an object!');
        }

        if ($("#FckEditor1").val() == "") {
            alert("FCKEditor is empty");
        } else {
            $("#NewPageForm").submit();
        }
    });

Хотя теперь я отправляюсь на пустую страницу при отправке формы, хотя в моем контроллере, похоже, нет проблемы - по крайней мере, я так не думаю, что если бы там была проблема, это бы помогло то же самое на моей локальной машине.

Ответы [ 3 ]

0 голосов
/ 31 января 2011

Если возможно, используйте взамен CKEditor;он намного лучше интегрируется с MVC.

http://ckeditor.com/

http://ckeditor.com/what-is-ckeditor

0 голосов
/ 02 февраля 2011

Я нашел источник моей проблемы, и это связано с тем, как я обрабатываю несколько кнопок отправки в моем контроллере.

Я настроил его, и теперь он исправлен.

0 голосов
/ 31 января 2011

Одна вещь, которая может вызывать вашу проблему, если вы выполняете проверку на сервере, это то, что, как только он находится на IIS, вы не можете публиковать содержимое HTML без проверки запроса, препятствующей передаче FCKContent. Кассини не проверит это, чтобы он работал на вашей локальной машине.

попробуйте добавить это к вашему действию, которое вызывается при публикации сообщения для проверки:

[ValidateInput(false)] 
public ActionResult UpdateAction() 
{ 

}
...