2014-08-27 8 views
5

मैंने ऐसा किया है।RedirectToAction के साथ ऑब्जेक्ट को छुपा पैरामीटर के रूप में कैसे पास किया जाए?

public ActionResult GetInfo(SomeModel entity) 
{ 
    ---- 
    return RedirectToAction("NewAction", "NewController", new System.Web.Routing.RouteValueDictionary(entity)); 
} 

कार्रवाई जो

public ActionResult NewAction(SomeModel smodel) 
{ 
    ------- 
    ------- 
} 

बुलाया गया था यह ठीक काम कर रहा है, लेकिन मैं ब्राउज़र पता पट्टी पर सभी पोस्ट परम मान देख सकते हैं, मैं ब्राउज़र में इन querystring परम मूल्यों कैसे छुपा सकते हैं।

http://localhost:51545/NewController/NewAction?SurveyID=13&CatID=1&PrimaryLang=1&SurveryName=Test%20Survery&EnableMultiLang=False&IsActive=False 

किसी भी सहायता की सराहना की जाएगी।

उत्तर

8

बजाय RouteValueDictionary का उपयोग करने और क्वेरी स्ट्रिंग से मॉडल की कोशिश TempData (क्योंकि जब हम RedirectToAction का उपयोग यह एक नया http अनुरोध और वस्तु मार्गों कर देगा उत्तीर्ण होने की अपनी मामले में यूआरएल में दिखाया जाएगा इसलिए इसकी नहीं एक अच्छा दृष्टिकोण में संवेदनशील डेटा प्रदर्शित करने के लिए यूआरएल)।

उपयोग TempData दिखाया गया है: -

public ActionResult GetInfo(SomeModel entity) 
{ 
    ---- 
    TempData["entity"] = entity; //put it inside TempData here 
    return RedirectToAction("NewAction", "NewController"); 
} 

public ActionResult NewAction() 
{ 
    SomeModel smodel = new SomeModel(); 
    if(TempData["entity"] != null){ 
    smodel = (SomeModel)TempData["entity"]; //retrieve TempData values here 
    } 
    ------- 
    ------- 
} 

यहाँ TempData उपयोग करने का लाभ यह है कि यह एक रीडायरेक्ट के लिए अपने मूल्य को बरकरार रखेगा और इसके अलावा मॉडल निजी तौर पर अन्य नियंत्रक कार्रवाई के लिए ले जाया जाएगा और एक बार आप से डेटा पढ़ने है TempData इसका डेटा स्वचालित रूप से निपटाया जाएगा और यदि आप इसे पढ़ने के बाद TempData मान बनाए रखना चाहते हैं तो TempData.keep("entity") का उपयोग करें।


या

अपने विचार एक ही नियंत्रक में कर रहे हैं तो यह आपकी समस्या के लिए एक सरल उपाय:

public ActionResult GetInfo(SomeModel entity) 
{ 
    ---- 
    return NewAction(entity); 
} 

public ActionResult NewAction(SomeModel smodel) 
{ 
    ------- 
    ------- 
    return View("NewAction",smodel) 
} 

के रूप में सही ढंग से तो यह यहाँ सहित im @ Chips_100 द्वारा टिप्पणी की: - पहला समाधान एक वास्तविक रीडायरेक्ट करेगा (302) जो उपयोगकर्ता ब्राउज़र में यूआरएल अपडेट करेगा। पता लगाने में मूल यूआरएल रखते हुए दूसरा समाधान वांछित परिणाम देगा।

+0

यह अत्यधिक जटिल लगता है। सर्वर साइड रीडायरेक्ट करने का कोई तरीका नहीं है? –

+0

@ फिलिपपिटल..क्या जटिल .. बस आपने टेम्पर्डटाटा के अंदर मॉडल डाला है और फिर वांछित कार्रवाई पर मॉडल में टाइपकास्ट टेम्पपडाटा टाइप किया है .. इसमें क्या जटिल है ?? –

+0

@ अपवाद: धन्यवाद यह @ फिलिप पिटल काम करता है: अगर किसी की सराहना की जाएगी तो कुछ और अधिक कुशल सुझाव। –

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

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