2012-03-24 1 views
1

Wrap Ich habe ein Formular auf einer Webseite, die ich über das Jquery-Formular-Plugin einreichen. Dieses Formular enthält eine Option zum Hochladen von Dateien. Die MVC3-Aktion, für die ich einen Beitrag einreiche, gibt JSON zurück. Da das Plugin mit einem iframe auf älteren Browsern fällt zurück müssen Sie Ihre JSON mit einem IWie kann ich meine JSON Aktion Ergebnis in eine <textarea>

<textarea>JSON data...</textarea> 

wickeln versucht, den Rückgabetyp der Aktion String Ändern und Anhängen nur der Textbereich Objekt die die JSON-Tags. ToString() aber nicht gehen. Wie kann ich mein JSON Ergebnis in einem Textfeld wickeln, wenn! Request.IsAjaxRequest()

Hier ist ein Beispiel für mich nur versuchen, die JSON als String zurück

[HttpPost] 
    public string CreateEntry(EntryCreateViewModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return WrapInTextArea(!Request.IsAjaxRequest(), Json(new object[] { false, 0, this.RenderPartialViewToString("_EntryCreateFormPartial", model) }).ToString()); 
     } 

(was nicht funktioniert) Dies funktioniert in modernen Browsern aber ich vermute, (bezogen auf die docs) wird in älteren Browsern fehlschlagen, die

[HttpPost] 
    public ActionResult CreateEntry(EntryCreateViewModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return Json(new object[] {false, 0, this.RenderPartialViewToString("_EntryCreateFormPartial", model)}); 
     } 
+0

über dieses Denken ein wenig mehr ich JsonResult außer Kraft setzen werde und versuchen Sie, die Textarea es –

Antwort

2

ein iframe verwenden, um dies zu lösen, die ich von JsonResult geerbt und hinzugefügt, um das Textfeld dort

using System; 
using System.Web.Mvc; 
using System.Web.Script.Serialization; 

namespace TinyHouseMap.Web.Infrastructure.Results 
{ 
    public class JsonInIframeResult : JsonResult 
    { 
     public bool EncloseInTextArea 
     { 
      get; 
      set; 
     } 

     public override void ExecuteResult(ControllerContext context) 
     { 
      if (context == null) 
      { 
       throw new ArgumentNullException("context"); 
      } 

      if ((JsonRequestBehavior == JsonRequestBehavior.DenyGet) 
       && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) 
      { 
       throw new InvalidOperationException("JsonRequest GetNotAllowed"); 
      } 

      var response = context.HttpContext.Response; 

      response.ContentType = !string.IsNullOrEmpty(ContentType) ? ContentType : "application/json"; 

      if (ContentEncoding != null) 
      { 
       response.ContentEncoding = ContentEncoding; 
      } 

      if (Data != null) 
      { 
       var serializer = new JavaScriptSerializer(); 

       string results; 
       if (EncloseInTextArea) 
       { 
        results = "<textarea>" + serializer.Serialize(Data) + "</textarea>"; 
       } 
       else 
       { 
        results = serializer.Serialize(Data); 
       } 


       response.Write(results); 
      } 
     } 
    } 
} 

und erstellt dann einen Helfer in meiner Controller-Basisklasse

protected JsonInIframeResult JsonInIframe(object data, string contentType, bool encloseInTextArea) 
    { 
     var result = new JsonInIframeResult {Data = data, ContentType = contentType, EncloseInTextArea = encloseInTextArea}; 
     return result; 
    } 
+0

Können Sie mir bitte sagen, wie es in dem lesen Clinet-Form 'xhr.responseText' – Lijo

Verwandte Themen