2017-02-07 8 views
5

मेरे पास एक ऐसी स्थिति है जहां परिणाम सफल होने पर मैं कुछ यूआरएल/एक्शन को रीडायरेक्ट/शो करना चाहता हूं लेकिन कुछ त्रुटि होने पर देखने के लिए वापस लौटना।Asp.Net कोर कार्रवाई पर रीडायरेक्ट करता है लेकिन कार्रवाई को सीधे कॉल करने की अनुमति नहीं देता है?

उदाहरण के लिए जब कुछ वर्क सच हो जाता है तो मैं कुछ डेटा के साथ "सफल पृष्ठ" दिखाना चाहता हूं लेकिन जब यह गलत होता है तो मैं पृष्ठ पर वापस आऊंगा और त्रुटियों को दिखाऊंगा।

आमतौर पर चाइल्डएक्शन इसे करने में सक्षम होगा, लेकिन नेट कोर में वे गायब लगते हैं।

इसे प्राप्त करने का सबसे अच्छा तरीका क्या होगा? मेरी मुख्य चिंता यह है कि यदि कोई व्यक्ति ब्राउज़र बार में लिखता है तो "सफलता" मार्ग/कार्रवाई सीधे पहुंच योग्य नहीं होनी चाहिए।

public IActionResult DoSomething() 
{ 
    bool success = someWork(); 
    if (success) 
    { 
     // goto some action but not allow that action to be called directly 
    } 
    else 
    { 
     return View(); 
    } 
} 
+0

जो भी आप सोच सकते हैं उसके बावजूद, आप पिछले संस्करणों में '[ChildActionOnly] 'विधि का उपयोग करने में सक्षम नहीं होते –

उत्तर

3

एक समाधान (या बल्कि एक समाधान) एक bool की दुकान और अपने अन्य कार्रवाई में यह जाँच करने के लिए अस्थायी डेटा का उपयोग करने के लिए है। इस तरह:

public IActionResult DoSomething() 
{ 
    bool success=someWork(); 
    if(success) 
    { 
     TempData["IsLegit"] = true; 
     return RedirectToAction("Success"); 
    } 
    else 
    { 
     return View(); 
    } 
} 

public IActionResult Success 
{ 
    if((TempData["IsLegit"]??false)!=true) 
     return RedirectToAction("Error"); 
    //Do your stuff 
} 
0

एएसपी.नेट कोर की एक नई सुविधा View Components है। घटकों में दो भाग होते हैं, एक वर्ग और परिणाम (आमतौर पर एक रेजर व्यू)। देखें घटक सीधे HTTP अंतराल के रूप में पहुंच योग्य नहीं हैं, उन्हें आपके कोड से आम तौर पर देखा जाता है (आमतौर पर एक दृश्य में)। उन्हें एक नियंत्रक से भी बुलाया जा सकता है जो आपकी ज़रूरत के अनुरूप सर्वोत्तम है। सफलता संदेश

<h3> Success Message <h3> 
Your Success Message... 

के लिए एक रेजर दृश्य बनाएँ इसी दृश्य घटक बनाएं

public class SuccessViewComponent : ViewComponent 
{ 
    public async Task<IViewComponentResult> InvokeAsync() 
    { 
     return View(); 
    } 
} 

ध्यान दें कि, देखने नाम और दृश्य घटक नाम और उन फ़ाइलों के लिए पथ बहुत मिलते-जुलते एक सम्मेलन का पालन करें नियंत्रक और विचार। इसके लिए एएसपी.नेट कोर दस्तावेज का संदर्भ लें।

अपनी कार्रवाई विधि

public IActionResult DoSomething() 
{ 
    bool success=someWork(); 
    if(success) 
    { 
     return ViewComponent("Success"); 
    } 
    else 
    { 
     return View(); 
    } 
} 
0

से देखने घटक आह्वान तुम बस कार्रवाई निजी बना सकता है।

public IActionResult DoSomething() 
{ 
    bool success = someWork(); 
    if (success) 
    { 
     // goto some action but not allow that action to be called directly 
     return MyCrazySecretAction(); 
    } 
    else 
    { 
     return View(); 
    } 
} 

private IActionResult MyCrazySecretAction() 
{ 
    return View(); 
} 
संबंधित मुद्दे