Проблема проверки клиента TinyMCE - PullRequest
10 голосов
/ 13 апреля 2010

У меня проблема с редактором TinyMCE. У меня есть форма с несколькими текстовыми полями и textarea (tinymce), и включена проверка клиента. Когда я нажимаю кнопку «Сохранить», проверка происходит во всех текстовых полях, но требуется 2 щелчка для проверки содержимого tinymce. Кроме того, проверка показывает сообщение только в том случае, если поле пустое или если условие не выполняется (только для целей теста, можно ввести не более 5 символов), но когда я ввожу правильное количество символов (менее 5), сообщение об ошибке остается.

Вот пример кода:

    <%Html.EnableClientValidation(); %>
    <%= Html.ValidationSummary(true, "Na stranici postoje greške.", new { @style = "color: red;" })%></p>
    <% using (Html.BeginForm("Create", "Article", FormMethod.Post, new { enctype = "multipart/form-data" }))
       { %>
    <fieldset>
        <legend>Podaci za Aranžman</legend>
            <label class="EditLabel" for="name">
                Opis</label>
            <br />
            <%= Html.TextAreaFor(Model => Model.Description, new { style = "width: 100%; height: 350px;", @class = "tinymce" })%>
            <%= Html.ValidationMessageFor(Model => Model.Description, "", new { @style = "color: red;" })%>
        <p>
            <input type="submit" value="Sačuvaj aranžman" />
        </p>
    </fieldset>
    <% } %>

и собственность

    [Required(ErrorMessage = "Unesi opis")]
    [StringLength(5, ErrorMessage = "Opis mora imati manje od 5 znakova")]
    public string Description { get; set; }

Есть предложения ???

Ответы [ 2 ]

27 голосов
/ 13 апреля 2010

Причина этого заключается в том, что большинство текстовых редакторов (включая крошечный mce) не используют текстовую область. Вместо этого он имеет собственный ввод и копирует текст только при отправке формы. Таким образом, поле, которое вы проверяете, фактически не изменяется, когда вы что-то вводите в редакторе.

То, что вам нужно будет сделать, - это обойти это, копируя текст из редактора в текстовую область, когда вы нажимаете кнопку отправки. Это можно сделать так:

$('#mySubmitButton').click(function() {
    tinyMCE.triggerSave();
});
1 голос
/ 05 марта 2014

Если у вас та же проблема, что и у Tinymce, проверка не запускается при отправке формы. У меня есть одно решение, подобное этому, я знаю, что это неправильный способ, но он работает нормально, см. Код ниже установить пакет tynymce jquery в ваше приложение

ЭТО МОДЕЛЬ

[Required(ErrorMessage = "Please enter About Company")]
[Display(Name = "About Company : ")]
[UIHint("tinymce_jquery_full"), AllowHtml]
public string txtAboutCompany { get; set; }

теперь в cshtml файле означает, на наш взгляд

<div class="divclass">
   @Html.LabelFor(model => model.txtAboutCompany, new { @class = "required" })
   @Html.EditorFor(model => model.txtAboutCompany)
   <span class="field-validation-error" id="AC" style="margin:9px 0 0 157px;"></span>
</div>

и при событии нажатия кнопки подтверждения отметьте этот jquery

$("#BusinessProfile").click(function () {
        var aboutC = $("#txtAboutCompany").val()
        var pinfo = $("#txtProductinfo").val();
        if (aboutC == "" && pinfo == "") {
            $("#AC").append("").val("").html("Please enter about company")
            $("#PI").append("").val("").html("Please enter product information")
            $("#bpform").valid();
            return false;
        } else if (aboutC == "") {
            $("#PI").append("").val("").html("")
            $("#AC").append("").val("").html("Please enter about company")
            $("#txtAboutCompany").focus();
            $("#bpform").valid();
            return false;
        } else if (pinfo == "") {
            $("#AC").append("").val("").html("")
            $("#PI").append("").val("").html("Please enter product information")
            $("#txtProductinfo").focus();
            $("#bpform").valid();
            return false;
        }
        else {
            $("#AC").append("").val("").html("");
            $("#PI").append("").val("").html("");
            //return true;
            $("#bpform").validate();
        }
    });

попробуйте этот код,

...