Publier une balise HTML (codes) sous forme de chaîne avec ASP.net MVC & JQuery

J’essaie de publier un formulaire via un modèle MVC dans une fonction Enregistrer dans un contrôleur. J’utilise également tinymce du côté client, ce qui donne une chaîne basée sur du code HTML telle que

Content text blah blah ...

.

Le problème est que je ne peux pas publier une chaîne qui inclut

something

Mais, étonnamment,

something

cette chaîne (avec des espaces après “<") ne pose aucun problème. Mais, je ne peux pas gérer ce code HTML et faire ces espaces avant de poster à chaque fois. Il doit y avoir un meilleur moyen.

Alors, comment puis-je poster une chaîne qui inclut du code HTML via la méthode $ .post? (Si vous devez savoir, ce projet est un système de gestion de contenu. Donc, je dois enregistrer le texte du contenu HTML dans une table SQL.) J’ai vu par le débogage, l’action post n’atteint même pas le contrôleur et je pense que cela est un problème que javascript, ai-je raison?

Voici le code que j’utilise:
Javascript


 fonction JqueryFromPost (formId) {

   var form = $ (formId);
   var action = form.attr ("action");
   var serializedForm = form.serializeArray ();

   $ .post (action, serializedForm, function (data) {
       // Obtenir les données Résultat ici ...
   });
 }

Code CS


    [HttpPost]
    public JsonResult SaveArticle (modèle ArticleModel)
    {
        JsonResult JResult = new JsonResult ();

        if (ModelState.IsValid)
            // Je fais la sauvegarde ici se terminant par "JResult.Data =" Success ";"  (cela pourrait aussi être un échec. Donc, c'est juste pour expliquer)

        retour JResult;
    }

ASP.NET possède une validation de requête intégrée qui consortingbue automatiquement à la protection contre les attaques par injection XSS et HTML. Si vous souhaitez explicitement désactiver cette validation, vous pouvez décorer l’action que vous publiez avec l’atsortingbut [ValidateInput(false)] :

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

De plus, si vous utilisez ceci sur ASP.NET 4.0 pour que cet atsortingbut prenne effet, vous devez append ce qui suit à votre fichier web.config:

  

Et si vous utilisez ASP.NET MVC 3.0, vous pouvez décorer uniquement la propriété de votre modèle qui requirejs HTML avec l’atsortingbut [AllowHtml] :

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

Toujours dans votre fonction javascript, vous voulez probablement serialize() au lieu de serializeArray() :

 function JqueryFromPost(formId) { var form = $(formId); $.post(form.action, form.serialize(), function (data) { //Getting the data Result here... }); } 

Vous ne devez pas utiliser ValidateInput (false) comme MSN l’a déclaré ici: http://msdn.microsoft.com/en-us/magazine/hh708755.aspx Il suffit d’utiliser [AllowHtml] sur la propriété de modèle que vous souhaitez utiliser au format HTML.

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

De plus, je pense que c’est mieux si vous encodez du code HTML et que vous l’envoyez ensuite au serveur.

L’utilisation de [ValidateInput (false)] est une très mauvaise pratique entraînant de nombreuses violations de la sécurité. [AllowHtml] sur une propriété de modèle est un moyen plus sécurisé et plus fiable de le faire. Mais il existe une solution beaucoup plus propre si vous ne pouvez pas utiliser une propriété modèle.

Encodez simplement le texte côté client ( JavaScript de mycase), décodez-le du côté serveur ( fonction du contrôleur ). J’ai utilisé le ci-dessous pour mon projet vb.net.

var SearchSsortingngValue =

some blah...blah data

Encodez maintenant la variable ci-dessus.

var encodedSearchSsortingngValue = window.escape(document.getElementById('SearchSsortingngValue').value)

passez maintenant encodeSearchSsortingngValue au contrôleur en utilisant ajax.

Dans le contrôleur, il suffit de décoder la variable pour obtenir

some blah...blah data

.

 Dim SearchSsortingngValue = HttpUtility.UrlDecode(encodeSearchSsortingngValue) 

J’espère que cela t’aides……… 🙂