2011-02-24 17 views
8

नीचे, CreateTest में, असफल, मैं CreateTest से टेस्ट पर रीडायरेक्ट करना चाहता हूं। जब पुनः निर्देशितपैरामीटर पास किए बिना अन्य क्रियाओं के पैरामीटर के साथ किसी क्रिया पर रीडायरेक्ट कैसे करें?

public ActionResult Tests(int? ID, string projectName){ 
    //... 
} 

उत्तर

26

आप तर्क प्रदान करने के लिए आवश्यकता हो सकती है:

public ActionResult Tests(int ID, string projectName) 
    { 
     TestModel model = new TestModel (ID, projectName); 
     return View(model); 
    } 

[HttpPost] 
    public ActionResult CreateTest(TestModel model) 
    { 
     try 
     { 
      return RedirectToAction("Tests"); 
     } 
     catch (Exception e) 
     { 
      ModelState.AddModelError("Error", e.Message); 
      return View(model); 
     } 
    } 
+0

धन्यवाद, लेकिन त्रुटि संदेशों को वापस कैसे करें? सार्वजनिक एक्शन रिसैट CreateTest (टेस्टमोडेल मॉडल) {कोशिश करें {रीडायरेक्ट टॉक्शन ("टेस्ट") वापसी; } पकड़ो (अपवाद ई) {ModelState.AddModelError ("त्रुटि", ई। संदेश); वापसी देखें (टेस्ट); }} – learning

+0

@ user281180, आप उन्हें क्वेरी स्ट्रिंग में भी पास कर सकते हैं: 'new {ID = model.ID, projectName = model.ProjectName, errorMessage =" कुछ त्रुटि संदेश "}'। लेकिन एक त्रुटि के मामले में जो मैं देख सकता हूं, उससे आप जो रीडायरेक्ट नहीं कर रहे हैं, आप बस उस दृश्य को प्रस्तुत कर रहे हैं जो इसे करने का सही तरीका है, ताकि आप दृश्य स्थिति में सीधे त्रुटि संदेश तक पहुंच सकें क्योंकि इसे मॉडल स्थिति में जोड़ा गया है। –

+0

@Darin यह काम नहीं कर रहा है, मुझे त्रुटि संदेश है: शब्दकोश में पारित मॉडल आइटम '<> f__AnonymousType1'2 [System.Int32, System.String]' प्रकार का है, लेकिन इस शब्दकोश को एक मॉडल की आवश्यकता है 'MvcUI.Models.TestModel' प्रकार का आइटम। – learning

0

int नल बनाओ:

मैं निम्नलिखित की तरह कुछ करना चाहता हूँ

return RedirectToAction("Tests", new { 
    ID = model.ID, 
    projectName = model.ProjectName 
}); 

और जिस यूआरएल पर आप रीडायरेक्ट करेंगे, अब इस तरह कुछ दिखेंगे:

/Foo/Tests?ID=123&projectName=abc

0

मैं जानता हूँ कि यह एक सा पुराना है लेकिन ...

मैं अतीत में क्या किया है मेरी आधार नियंत्रक पर एक "MessageArea" वर्ग एक संपत्ति के रूप में सामने आ रहा है कि सभी मेरी अंततः नियंत्रकों से प्राप्त होता है। संपत्ति वास्तव में TempData में कक्षा उदाहरण स्टोर करता है। MessageArea में जोड़ने के लिए एक तरीका है() जो एक स्ट्रिंग संदेश और एक enum प्रकार लेता है (उदा। सफलता, त्रुटि, चेतावनी, सूचना)।

मेरे पास एक आंशिक है जो संदेश के प्रकार के अनुसार उचित स्टाइल के साथ संदेश एरिया में जो भी संदेश प्रस्तुत करता है।

मेरे पास एक HTMLHelper एक्सटेंशन विधि RenderMessageArea() है, इसलिए किसी भी दृश्य में मैं सरल कह सकता हूं @ Html.RenderMessageArea(), विधि और आंशिक आंशिक देखभाल न करें और कोई संदेश नहीं होने पर आउटपुट आउटपुट नहीं है।

क्योंकि टेम्पपडाटा में संग्रहीत डेटा केवल 1 अनुरोध से बचता है, यह उन मामलों के लिए आदर्श है जहां आप अपनी कार्रवाई को पुनर्निर्देशित करना चाहते हैं लेकिन गंतव्य पृष्ठ पर दिखाए गए 1 या अधिक संदेश हैं, उदा। एक त्रुटि, अधिकृत पृष्ठ आदि नहीं ... या यदि आप कोई आइटम जोड़ते हैं लेकिन फिर अनुक्रमणिका सूची पृष्ठ पर वापस आते हैं।

स्पष्ट रूप से आप अन्य डेटा को पास करने के समान कुछ लागू कर सकते हैं। आखिर में मैं कहूंगा कि यह स्वीकार किए गए उत्तर से मूल प्रश्न का बेहतर समाधान है।

संपादित करें, उदाहरण:

public class MessageAreaModel { 
    public MessageAreaModel() { 
     Messages = new List<Message>(); 
    } 

    public List<Message> Messages { get; private set; } 

    public static void AddMessage(string text, MessageIcon icon, TempDatadictionary tempData) { 
     AddMessage(new Message(icon, text), tempData); 
    } 

    public static void AddMessage(Message message, TempDataDictionary tempData) { 
     var msgArea = GetAreaModelOrNew(tempData); 
     msgArea.Messages.Add(message); 
     tempData[TempDataKey] = msgArea; 
    } 

    private static MessageAreaModel GetAreaModelOrNew(TempDataDictionary tempData) { 
     return tempData[TempDataKey] as MessageAreaModel ?? new MessageAreaModel(); 
    } 

ऊपर वर्ग तो अपने यूआई परत नियंत्रक द्वारा प्रयोग किया जाता से संदेशों को जोड़ने के लिए इस्तेमाल किया जा सकता है।

फिर तो जैसे एक HtmlHelper एक्सटेंशन जोड़ने:

public static void RenderMessageArea(this HtmlHelper html) { 
    html.RenderPartial("MessageArea", 
     (MessageAreaModel)html.ViewContext.TempData[MessageAreaModel.TempDataKey] ?? MessageAreaModel.Empty); 
    html.ViewContext.TempData.Remove(MessageAreaModel.TempDataKey); 
} 

ऊपर पूरी तरह से पूरा नहीं कर रहा है कोड विभिन्न घंटियाँ और सीटी मैं बाहर छोड़ दिया है देखते हैं, लेकिन आप इंप्रेशन प्राप्त करें।

+0

क्या आप कुछ कोड पोस्ट कर सकते हैं? – Emanuele

+0

मेरे प्रश्न प्रतिक्रिया के लिए एक छोटा कोड उदाहरण जोड़ा गया। – Peter

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