2011-02-22 9 views
6

मैं jquery में $ .ajax विधि का उपयोग करके एक एक्टिन में डेटा पोस्ट कर रहा हूं, जेएसओएन स्ट्रिंग किए गए मानों को पारित करने के लिए डेटा फ़ील्ड का उपयोग करके डेटा को निर्दिष्ट करने के लिए डेटा निर्दिष्ट करता हूं।एएसपीनेट एमवीसी 3 - ऑनएक्शन में जेएसओएन डेटा पोस्ट करना

इन्हें कार्रवाई ठीक पर पोस्ट किया गया है, लेकिन मैं उन्हें ऑनएक्शन एक्सेलिंग एक्शन फ़िल्टर में नहीं ले सकता (वे फॉर्म या पैराम्स संग्रह का हिस्सा नहीं हैं)। क्या उन्हें पाने का कोई तरीका है और यदि नहीं, तो क्या आप शेयर बता सकते हैं क्यों नहीं?

उत्तर

11

अपनी कार्रवाई एक मॉडल लेता है:

[HttpPost] 
public ActionResult About(SomeViewModel model) 
{ 
    return Json(model); 
} 

आप सीधे इस पैरामीटर मान क्योंकि JsonValueProviderFactory यह पहले से ही पार्स है | सकता है:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    base.OnActionExecuting(filterContext); 
    SomeViewModel model = filterContext.ActionParameters["model"] as SomeViewModel; 
} 

अगर कोई मॉडल है (क्यों नहीं होता वहाँ हो सकता है?) आप अनुरोध स्ट्रीम से JSON पढ़ सकते हैं:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    base.OnActionExecuting(filterContext); 
    filterContext.HttpContext.Request.InputStream.Position = 0; 
    using (var reader = new StreamReader(filterContext.HttpContext.Request.InputStream)) 
    { 
     string json = reader.ReadToEnd(); 
    } 
} 
+1

धन्यवाद डैरिन लिए भेजा गया था, इस –

+1

@Steve वार्ड में शामिल आप अपनी टिप्पणी के साथ कुछ पूछना चाहते थे? क्या मेरे उत्तर के बारे में कुछ स्पष्ट नहीं है? –

+0

धन्यवाद डारिन। इस मामले में, यह पैरामीटर मॉडल का हिस्सा नहीं है क्योंकि यह प्रत्येक क्रिया के लिए प्रदान किया जाता है लेकिन कभी भी कार्रवाई (प्रमाणीकरण के साथ करने के लिए) द्वारा उपयोग नहीं किया जाता है। यह सिर्फ वैश्विक एक्शन फ़िल्टर में उपयोग किया जाता है, इसलिए दूसरा दृष्टिकोण जाने का तरीका प्रतीत होता है। मैं इसे जेसन से बाहर कर सकता हूं क्योंकि यह एकमात्र तरीका है ... –

0
protected override void OnActionExecuting(ActionExecutingContext ctx) {  
    //All my viewDto end with "viewDto" so following command is used to find them 
    KeyValuePair<string, object> dto = ctx.ActionParameters.FirstOrDefault(item => 
     item.Key.ToLower().EndsWith("viewdto") 
    ); 

    string postedData; 

    if (dto.Key != null) { 
     object viewData = dto.Value; 

     if (dto.Key.ToLower() == "viewdto") { 
      var stdStoryViewDto = dto.Value as StandardStoryViewDto; 
      //removing unnecessary stuff 
      stdStoryViewDto.Industries.Clear(); 
      stdStoryViewDto.TimeZones.Clear(); 
      viewData = stdStoryViewDto; 
     } 
     postedData = JsonConvert.SerializeObject(viewData); 
    } else { 
     postedData = string.Join(",", 
      Array.ConvertAll(ctx.ActionParameters.Keys.ToArray(), 
      key => key + "=" + ctx.ActionParameters[key]) 
     ); 
    } 
} 

postedData चर, JSON प्रारूप में डेटा है कि कार्रवाई

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