• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

197
Views
Publicar etiqueta HTML (códigos) como cadena con ASP.net MVC y JQuery

Estoy tratando de publicar un formulario a través de un modelo MVC en una función Guardar en un controlador. También estoy usando tinymce en el lado del cliente, lo que da como resultado una cadena basada en código HTML como <p> Content text blah blah ...</p> .

El problema es que no puedo publicar una cadena que incluya <p> something </p> Pero, sorprendentemente, < p > something < / p > esta cadena (con espacios después de "<") NO tiene ningún problema. Pero no puedo manejar este código html y hacer estos espacios antes de publicar cada vez. Debe haber una mejor manera.

Entonces, ¿cómo puedo publicar una cadena que incluya código HTML a través del método $.post? (Si debe saberlo, este proyecto es un sistema de administración de contenido. Por lo tanto, tengo que guardar el texto del contenido basado en HTML en una tabla SQL). Vi al depurar que la acción posterior ni siquiera llega al controlador y creo que esto es solo un problema de javascript, ¿verdad?

Aquí está el código que estoy usando:
JavaScript


función JqueryFromPost(formId) {

  var formulario = $(formId);
  var acción = form.attr("acción");
  var serializedForm = form.serializeArray();

  $.post(acción, formulario serializado, función (datos) {
      //Obteniendo el resultado de los datos aquí...
  });
}

código CS


   [Publicación HTTP]
   público JsonResult SaveArticle (modelo ArticleModel)
   {
       JsonResult JResult = nuevo JsonResult();

       si (ModelState.IsValid)
           //Hago el guardado aquí que termina con "JResult.Data = "Success";" (esto también podría fallar. Entonces, es solo para explicar)

       devolver JResultado;
   }
about 3 years ago · Santiago Trujillo
3 answers
Answer question

0

ASP.NET tiene una validación de solicitud integrada que ayuda automáticamente a proteger contra ataques de inyección de XSS y HTML. Si desea deshabilitar explícitamente esta validación, puede decorar la acción que está publicando con el atributo [ValidateInput(false)] :

 [HttpPost] [ValidateInput(false)] public ActionResult SaveArticle(ArticleModel model) { var JResult = new JsonResult(); if (ModelState.IsValid) { ... } return JResult; }

Además, si está ejecutando esto en ASP.NET 4.0 para que este atributo surta efecto, debe agregar lo siguiente a su web.config:

 <httpRuntime requestValidationMode="2.0" />

Y si está utilizando ASP.NET MVC 3.0, puede decorar solo la propiedad en su modelo que requiere HTML con el atributo [AllowHtml] :

 public class ArticleModel { [AllowHtml] public string SomeProperty { get; set; } public string SomeOtherProperty { get; set; } }

También en su función de JavaScript, probablemente desee serialize() en lugar de serializeArray() :

 function JqueryFromPost(formId) { var form = $(formId); $.post(form.action, form.serialize(), function (data) { //Getting the data Result here... }); }
about 3 years ago · Santiago Trujillo Report

0

No debe usar ValidateInput (falso) como dijo MSN aquí: http://msdn.microsoft.com/en-us/magazine/hh708755.aspx Simplemente use [AllowHtml] en la propiedad de su modelo que desea tomar html.

 [AllowHtml] public String htmlContainer { get; set; }

Además, creo que es mejor si codifica html y luego lo publica en el servidor.

about 3 years ago · Santiago Trujillo Report

0

Usar [ValidateInput(false)] es una práctica muy mala que conduce a muchas infracciones de seguridad, [AllowHtml] en una propiedad modelo es una forma más segura y confiable de hacerlo. Pero hay una solución mucho más limpia si no puede usar una propiedad de modelo.

Simplemente codifica el texto en el lado del cliente ( mycase javascript ), descifralo en el lado del servicio ( función del controlador ). Usé lo siguiente para mi proyecto vb.net.

var SearchStringValue = <p> some blah...blah data </p>

Ahora codificando la variable anterior.

var encodedSearchStringValue = window.escape(document.getElementById('SearchStringValue').value)

ahora pase encodeSearchStringValue al controlador usando ajax.

En el controlador simplemente decodifique la variable para obtener <p> some blah...blah data </p>.

 Dim SearchStringValue = HttpUtility.UrlDecode(encodeSearchStringValue)

Espero que esto ayude......... :)

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error