2011-01-21 16 views
17

के साथ स्ट्रिंग के रूप में एचटीएमएल टैग (कोड) पोस्ट करें मैं एक एमवीसी मॉडल के माध्यम से एक नियंत्रक में एक सहेजें समारोह में एक फॉर्म पोस्ट करने की कोशिश कर रहा हूं। मैं क्लाइंट साइड पर टिनिमस का भी उपयोग कर रहा हूं जिसके परिणामस्वरूप एचटीएमएल कोड आधारित स्ट्रिंग जैसे <p> Content text blah blah ...</p>एएसपीनेट एमवीसी और JQuery

समस्या यह है कि मैं एक स्ट्रिंग है <p> something </p> लेकिन आश्चर्यजनक रूप से, <p> something </p > (के बाद "<" रिक्ति के) इस स्ट्रिंग शामिल कोई समस्या नहीं है पोस्ट नहीं कर सकते है। लेकिन, मैं इस एचटीएमएल कोड को संभाल नहीं सकता और हर बार पोस्ट करने से पहले इन रिक्त स्थानों को बना सकता हूं। इसके लिए अवश्य ही एक बेहतर तरीका होना चाहिए। '

तो, मैं एक स्ट्रिंग कैसे पोस्ट कर सकता हूं जिसमें $ .post विधि के माध्यम से HTML कोड शामिल है? (यदि आपको पता होना चाहिए, तो यह प्रोजेक्ट एक कंटेंट मैनेजमेंट सिस्टम है। इसलिए, मुझे HTML आधारित सामग्री टेक्स्ट को SQL तालिका में सहेजना है।) मैंने डीबगिंग करके देखा है, पोस्ट एक्शन भी नियंत्रक तक पहुंच नहीं है और मैं लगता है कि यह एकमात्र जावास्क्रिप्ट समस्या है, क्या मैं सही हूँ?

यहाँ कोड मैं का उपयोग कर रहा है:
जावास्क्रिप्ट


 
function JqueryFromPost(formId) { 

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

    $.post(action, serializedForm, function (data) { 
     //Getting the data Result here... 
    }); 
} 

सीएस कोड


 
    [HttpPost] 
    public JsonResult SaveArticle(ArticleModel model) 
    { 
     JsonResult JResult = new JsonResult(); 

     if (ModelState.IsValid) 
      //I do the saving here ending with "JResult.Data = "Success";" (this could also be Failed. So, its just to explain) 

     return JResult; 
    } 

उत्तर

47

ASP.NET अंतर्निहित अनुरोध validati उस पर एक्सएसएस और एचटीएमएल इंजेक्शन हमलों के खिलाफ सुरक्षा में मदद मिलती है। आप कार्रवाई आप [ValidateInput(false)] विशेषता के साथ पोस्ट कर रहे हैं को सजाने सकता है आप स्पष्ट रूप से यह मान्यता अक्षम करना चाहते हैं:

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

इसके अलावा, आप को प्रभावी बनाने के आप जोड़ने की जरूरत है इस विशेषता के लिए ASP.NET 4.0 पर इस चला रहे हैं अपने web.config के लिए निम्न:

<httpRuntime requestValidationMode="2.0" /> 

और अगर आप ASP.NET MVC 3.0 का उपयोग कर रहे हैं कि आप अपने मॉडल पर केवल संपत्ति है कि [AllowHtml] विशेषता के साथ HTML की आवश्यकता को सजाने कर सकते हैं:

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

    public string SomeOtherProperty { get; set; } 
} 

इसके अलावा अपने जावास्क्रिप्ट समारोह में आप शायद serialize() बजाय serializeArray() हैं:

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

यह पूरी तरह से मेरी समस्या हल! –

+2

बहुत उपयोगी। लेकिन मुझे इसे .NET 4.0 में ' ' –

+0

[AllowHtml] <- के बिना काम करना पड़ा –

3

आप ValidateInput (गलत) उपयोग नहीं करना चाहिए के रूप में एमएसएन यहां कहा: http://msdn.microsoft.com/en-us/magazine/hh708755.aspx बस अपने मॉडल संपत्ति पर [AllowHtml] का उपयोग आप जाना चाहें, एचटीएमएल ।

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

अतिरिक्त रूप से मुझे लगता है कि यदि आप HTML को एन्कोड करते हैं और फिर इसे सर्वर पर पोस्ट करते हैं तो बेहतर होता है।

0

का उपयोग [ValidateInput (गलत)] एक बहुत बुरा व्यवहार जो एक मॉडल संपत्ति अधिक सुरक्षित है और ऐसा करने का विश्वसनीय रास्ते पर [AllowHtml], कई सुरक्षा उल्लंघनों की ओर जाता है है। लेकिन यदि आप मॉडल संपत्ति का उपयोग नहीं कर सकते हैं तो एक बहुत साफ समाधान है।

सीधे शब्दों में एनकोड क्लाइंट साइड पर पाठ (mycase जावास्क्रिप्ट), डिकोड सेवा की ओर (नियंत्रकसमारोह) पर। मैंने नीचे अपने vb.net प्रोजेक्ट के लिए उपयोग किया था।

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

अब एन्कोडिंग ऊपर चर।

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

अब ajax का उपयोग कर नियंत्रक को encodeSearchStringValue गुजरती हैं।

नियंत्रक में सिर्फ डिकोड चर <p> some blah...blah data </p>.

Dim SearchStringValue = HttpUtility.UrlDecode(encodeSearchStringValue) 

आशा इस मदद करता है पाने के लिए ......... :)

संबंधित मुद्दे