2010-04-13 9 views
10

Tengo un problema con el editor TinyMCE. Tengo formulario con pocos campos de texto y área de texto (tinymce) y habilité la validación del cliente. Cuando hago clic en Guardar, la validación del botón aparece en todos los campos de texto, pero se necesitan 2 clics para validar el contenido de tinymce. Además, la validación muestra mensaje solo cuando el campo está vacío, o si la condición no está satisfecha (solo para causas de prueba, se pueden ingresar 5 caracteres como máximo), pero cuando ingreso el número correcto de caracteres (menos de 5), permanece el mensaje de error.Problema de validación del cliente TinyMCE

Aquí es ejemplo de código:

<%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> 
    <% } %> 

y la propiedad

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

Cualquier sugerencia ???

Respuesta

26

La razón detrás de esto es que la mayoría de los editores de texto enriquecido (incluido el mce pequeño) no utiliza el área de texto. En cambio, tiene su propia entrada y solo copia sobre el texto cuando se envía el formulario. Por lo tanto, el campo que está validando en realidad no cambia cuando escribe algo en el editor.

Lo que tendrá que hacer es crear una solución alternativa para esto que copia el texto del editor al área de texto cuando hace clic en el botón Enviar. Esto se puede hacer de esta manera:

$('#mySubmitButton').click(function() { 
    tinyMCE.triggerSave(); 
}); 
+1

Hola Mattias, gracias por la respuesta, Altough Yo probé esta solución, incluso antes de la publicación de la pregunta, y es trabajó para el problema de clic. Pero mi mensaje de error apareció incluso cuando ingresé la cantidad correcta de caracteres (menos de cinco). Y descubrí por qué, me olvidé por completo de las etiquetas HTML que se agregaron por editor. Incluso si escribí solo un carácter, mi condición no se cumplió debido a las etiquetas adicionales. Estúpido error :) Todavía tu respuesta es correcta, gracias de nuevo –

+0

+1 Muy útil gracias. Estaba teniendo el mismo problema. – TheCarver

1

Si tiene el mismo problema como tinymce requiere la validación no es fuego en el formulario de envío vez que tengo una solución como esta, sé que este no es el camino correcto, pero que funcione bien ver el a continuación código instalar el paquete de jQuery tynymce en su aplicación

ESTE ES eL MODELO

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

ahora en el archivo cshtml significa en nuestra opinión

<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> 

y el botón de envío evento click comprobar esto 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(); 
     } 
    }); 

probar este código,

Cuestiones relacionadas