প্যারামিটারের সাথে পুনর্নির্দেশ করুন ction


596

আমি একটি কর্ম আমি একজন নোঙ্গর thusly থেকে কল আছে Site/Controller/Action/IDযেখানে IDএকটি হল int

পরে আমাকে কন্ট্রোলার থেকে একই ক্রিয়ায় পুনর্নির্দেশ করা দরকার।

এটি করার কোনও চতুর উপায় আছে? বর্তমানে আমি IDটেম্পডেটাতে স্ট্যাশ করছি , কিন্তু আপনি ফিরে যাওয়ার পরে যখন পৃষ্ঠাটি আবার সতেজ করতে f5 চাপছেন তখন টেম্পডেটা চলে যাবে এবং পৃষ্ঠাটি ক্র্যাশ হয়ে যাবে।

উত্তর:


945

আপনি আইডিটি রিডাইরেক্টোঅ্যাকশন () পদ্ধতির রুটভ্যালু প্যারামিটারের অংশ হিসাবে পাস করতে পারেন।

return RedirectToAction("Action", new { id = 99 });

এটি সাইট / কন্ট্রোলার / অ্যাকশন / 99 এ পুনঃনির্দেশের কারণ ঘটবে। টেম্প বা কোনও ধরণের ভিউ ডেটার দরকার নেই।


2
কিছু আছে কি অন্যরকম কিছু আছে বা নিয়ন্ত্রক নির্দিষ্ট করেও? (এক নিয়ামক থেকে অন্য নিয়ামকের ক্রিয়া পর্যন্ত আমার এটি করা দরকার)।
দিয়েগো

18
@ ডিগো: হ্যাঁ, এর জন্য বেশ কয়েকটি ওভারলোড রয়েছে। আমার উদাহরণে এটা RedirectToAction হবে ( "অ্যাকশন", "কন্ট্রোলার", নতুন {আইডি = 99}) msdn.microsoft.com/en-us/library/dd470154.aspx
কার্ট Schindler

10
ভিবি -Return RedirectToAction("Action", "Controller", New With {.id = 99})
জেরেমি এ ওয়েস্ট

একই জিনিস করার কোনও উপায় কি তবে এর মতো ইউআরএল আপডেট নেই?
মূল্যবান 7

@ কুর্টসচিন্ডার যাইহোক আপনার উত্তরটি আপডেট করার জন্য আপনার মন্তব্যের উদাহরণকে বিভিন্ন নিয়ামককেও পুনর্নির্দেশের অন্তর্ভুক্ত করতে? যারা মন্তব্য পড়তে পারেন না তাদের সহায়তার জন্য।
এডওয়ার্ড

194

কার্টের উত্তরটি আমার গবেষণা থেকে সঠিক হওয়া উচিত, কিন্তু যখন আমি চেষ্টা করেছি তখন এটি আমার পক্ষে কাজ করার জন্য এটি করতে হয়েছিল:

return RedirectToAction( "Main", new RouteValueDictionary( 
    new { controller = controllerName, action = "Main", Id = Id } ) );

আমি যদি নিয়ামক নির্দিষ্ট না করি এবং এতে ক্রিয়াটি RouteValueDictionaryকাজ করে না।

এছাড়াও যখন এই জাতীয় কোডিং করা হয় তখন প্রথম প্যারামিটার (অ্যাকশন) উপেক্ষা করা হবে বলে মনে হয়। সুতরাং আপনি যদি ডিক্টে কেবলমাত্র নিয়ামক নির্দিষ্ট করে থাকেন এবং প্রথম পরামিতিটি অ্যাকশন নির্দিষ্ট করার প্রত্যাশা করেন তবে এটি কার্যকর হয় না।

আপনি যদি পরে চলে আসেন তবে প্রথমে কার্টের উত্তরটি চেষ্টা করে দেখুন, এবং আপনার যদি এখনও সমস্যা থাকে তবে এটি ব্যবহার করে দেখুন।


6
দুর্দান্ত উত্তর। এছাড়াও, আমি বিশ্বাস করি যে controllerআপনি যে পদক্ষেপে পুনর্নির্দেশ করছেন সেই একই কন্ট্রোলারে পুনঃনির্দেশ ক্রিয়াটি থাকলে প্যারামিটারটি alচ্ছিক।
im1dermike

1
এটি অনুমিত হওয়ার কথা, তবে আমি যখন সেভাবে এটি করি তখন এটি কার্যকর হয় না, আমাকে স্পষ্টভাবে কন্ট্রোলার যুক্ত করতে হয়েছিল ... এটি এমভিসির প্রথম দিনগুলিতে আক্ষরিক ছিল, যদি এখন আমার অনুমান করতে হয় আমি বলতাম আমি দেখার জন্য এক ধরণের রাউটিং সেটআপ সমস্যা ছিল।
এরিক ব্রাউন - ক্যাল

রহস্যময়। এমভিসি 4 এ আমার জন্য কাজ করে।
im1dermike

এটি এমভিসি 1 দিনের মধ্যে ফিরে এসেছিল এবং এটি অন্যদের জন্য ভাল কাজ করেছিল, এজন্য আমি কোনও কনফিগারেশন সমস্যা নিয়ে সন্দেহ করছি, পিছনে ফিরে তাকাব।
এরিক ব্রাউন - ক্যাল

@ এরিকব্রাউন-ক্যাল এমনকি আপনার মন্তব্যে নিজের জমা দেওয়ার পরেও কি আপনি কি মনে করেন না যে আপনার প্রথম দিনগুলিতে একই ইস্যুটির উত্তর চেয়েছিলেন তাদের পক্ষে কার্টের উত্তর আরও ভাল উপযুক্ত?
এডওয়ার্ড

62

RedirectToAction পরামিতি সহ:

return RedirectToAction("Action","controller", new {@id=id});

1
এটা কি কাজ করে? আমি বিশ্বাস করি এটি ভুল সিনট্যাক্স। আমি ভুল হলে শুধরে.
xameeramir

1
@ পিবি 2 কিউ new {id = id}ঠিক তেমন কাজ করে কারণ কাঠামোটি জানে যে আপনি কোন পরিবর্তনশীল উল্লেখ করছেন।
এডওয়ার্ড

61

এটিও লক্ষণীয় যে আপনি 1 টিরও বেশি পরামিতি দিয়ে যেতে পারেন। আইডি ইউআরএল এর কিছু অংশ তৈরি করতে ব্যবহৃত হবে এবং অন্য যে কোনও একটি প্যারামিটার হিসাবে পেরিয়ে যাবে? url এ এবং ডিফল্ট হিসাবে UrlEncoded হবে।

যেমন

return RedirectToAction("ACTION", "CONTROLLER", new {
           id = 99, otherParam = "Something", anotherParam = "OtherStuff" 
       });

ইউআরএলটি হ'ল:

    /CONTROLLER/ACTION/99?otherParam=Something&anotherParam=OtherStuff

এগুলি তখন আপনার নিয়ামক দ্বারা উল্লেখ করা যেতে পারে:

public ActionResult ACTION(string id, string otherParam, string anotherParam) {
   // Your code
          }


39

এমভিসি 4 উদাহরণ ...

নোট করুন যে আপনাকে সর্বদা আইডি নামের প্যারামিটারটি পাস করতে হবে না

var message = model.UserName + " - thanks for taking yourtime to register on our glorious site. ";
return RedirectToAction("ThankYou", "Account", new { whatever = message });

এবং,

public ActionResult ThankYou(string whatever) {
        ViewBag.message = whatever;
        return View();
} 

অবশ্যই যদি আপনার পছন্দ হয় তবে আপনি ভিউব্যাগ ব্যবহার না করে মডেল ক্ষেত্রগুলিতে স্ট্রিং বরাদ্দ করতে পারেন।


24

যদি আপনার প্যারামিটারটি কোনও জটিল অবজেক্ট হিসাবে ঘটে থাকে তবে এটি সমস্যার সমাধান করে । চাবিটি হল RouteValueDictionaryকনস্ট্রাক্টর।

return RedirectToAction("Action", new RouteValueDictionary(Model))

আপনি সংগ্রহ আছে এরকম, এটা একটি বিট trickier তোলে, কিন্তু এই অন্য উত্তর খুব সুন্দরভাবে এই কভার


21
RedirectToAction("Action", "Controller" ,new { id });

আমার জন্য কাজ করেছেন, করার দরকার নেই new{id = id}

আমি একই নিয়ামকের মধ্যে পুনর্নির্দেশ করছিলাম তাই আমার প্রয়োজন হয়নি "Controller"তবে যখন প্যারামিটার হিসাবে নিয়ামক প্রয়োজন হয় তখন আমি পিছনে নির্দিষ্ট যুক্তির বিষয়ে নিশ্চিত নই।


RedirectToAction("Action", "Controller", new { id = id});আমার কোর ৩.১ অ্যাপে আমার যা প্রয়োজন ছিল তা ছিল was
অরেঞ্জক্যাটারপিলার

18

যদি কেউ এর জন্য ত্রুটি বার্তা প্রদর্শন করতে চান [httppost]তবে তিনি ব্যবহার করে কোনও আইডি পাস করে চেষ্টা করতে পারেন

return RedirectToAction("LogIn", "Security", new { @errorId = 1 });

এই মত বিশদ জন্য

 public ActionResult LogIn(int? errorId)
        {
            if (errorId > 0)
            {
                ViewBag.Error = "UserName Or Password Invalid !";
            }
            return View();
        }

[Httppost]
public ActionResult LogIn(FormCollection form)
        {
            string user= form["UserId"];
            string password = form["Password"];
            if (user == "admin" && password == "123")
            {
               return RedirectToAction("Index", "Admin");
            }
            else
            {
                return RedirectToAction("LogIn", "Security", new { @errorId = 1 });
            }
}

আশা করি এটি ভাল কাজ করে।


16

....

int parameter = Convert.ToInt32(Session["Id"].ToString());

....

return RedirectToAction("ActionName", new { Id = parameter });

15

আমারও এই সমস্যাটি ছিল এবং আপনি একই নিয়ামকের মধ্যে থাকলে এটি করার একটি দুর্দান্ত উপায় হল নামকরণকৃত প্যারামিটার ব্যবহার করা:

return RedirectToAction(actionName: "Action", routeValues: new { id = 99 });

7

এটি বছর পূর্বে হতে পারে তবে যাইহোক, এটি আপনার গ্লোবাল.এক্সএক্স মানচিত্রের রুটের উপরও নির্ভর করে যেহেতু আপনি যা চান তার সাথে মান যুক্ত করতে বা পরামিতিগুলি সম্পাদনা করতে পারেন।

যেমন।

Global.asax

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            //new { controller = "Home", action = "Index", id = UrlParameter.Optional 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional,
                  extraParam = UrlParameter.Optional // extra parameter you might need
        });
    }

তারপরে আপনাকে যে প্যারামিটারগুলি পাস করতে হবে তা এতে পরিবর্তিত হবে:

return RedirectToAction( "Main", new RouteValueDictionary( 
    new { controller = controllerName, action = "Main", Id = Id, extraParam = someVariable } ) );

7

আপনার যদি প্রয়োজন হয় কন্ট্রোলারের বাইরে কোনও অ্যাকশনে আপনাকে ডায়রেক্ট করতে হবে এটি কাজ করবে।

return RedirectToAction("ACTION", "CONTROLLER", new { id = 99 });

1

নিম্নলিখিতটি এসপ নেট কোর ২.১ সহ সফল হয়েছে। এটি অন্য কোথাও প্রয়োগ হতে পারে। অভিধানটি কন্ট্রোলারবেস.কন্ট্রোলারকন্টেক্সট.রউটিডাটা.ভ্যালুগুলি ক্রিয়া পদ্ধতির মধ্যে থেকে সরাসরি অ্যাক্সেসযোগ্য এবং লিখনযোগ্য। সম্ভবত এটি অন্যান্য সমাধানগুলির ডেটার চূড়ান্ত গন্তব্য। এটি ডিফল্ট রাউটিং ডেটা কোথা থেকে আসে তাও দেখায়।

[Route("/to/{email?}")]
public IActionResult ToAction(string email)
{
    return View("To", email);
}
[Route("/from")]
public IActionResult FromAction()
{
    ControllerContext.RouteData.Values.Add("email", "mike@myemail.com");
    return RedirectToAction(nameof(ToAction));
         // will redirect to /to/mike@myemail.com
}
[Route("/FromAnother/{email?}")]`
public IActionResult FromAnotherAction(string email)
{
    return RedirectToAction(nameof(ToAction));
         // will redirect to /to/<whatever the email param says>
         // no need to specify the route part explicitly
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.