পুনঃনির্দেশের আগে ভিউব্যাগ সেট করুন


122

ViewBagআমি পুনঃনির্দেশ বলার আগে কি সেটটি সেট করা সম্ভব ?

আমি এরকম কিছু চাই:

@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");

উত্তর:


242

আপনি পুনঃনির্দেশ ব্যবহার করার সময়, আপনি ব্যবহার করবেন না ViewBag, কিন্তুTempData

public ActionResult Action1 () {
 TempData["shortMessage"] = "MyMessage";
 return RedirectToAction("Action2");
}

public ActionResult Action2 () {
 //now I can populate my ViewBag (if I want to) with the TempData["shortMessage"] content
  ViewBag.Message = TempData["shortMessage"].ToString();
  return View();
}

1
আপনি যদি ভিউ না থাকেন তবে কেন আপনি @ ভিউবাগ?
এপিসিসবোসিন 21

6
আমি উত্তরটি সম্পূর্ণ করতে চাই কারণ আমি এটি ব্যবহার করছি এবং আমি একটি ছোট সমস্যার মুখোমুখি হলাম যখন টেম্পাটাটা কোনও কারণে খালি থাকে (আমার ক্ষেত্রে যখন কেবল কোনও রূপান্তর করা হয় তখনই আমার একটি বার্তা থাকে)। সুতরাং একটি ত্রুটি এড়ানোর জন্য আমাকে (টেম্পডাটা ["বার্তা"]! = নাল) পরীক্ষা করতে হয়েছিল।
প্যাট্রিক

1
পুনর্নির্দেশটি অন্য নিয়ামকের কাছে হলে কী হবে? অন্যান্য নিয়ামকের ক্রিয়াকলাপে ভিউব্যাগ, টেম্পডাটা এবং সেশন সবই খালি!
অ্যান্ড্রু

1
@ অ্যান্ড্রু ভাল, টেম্পাটাটা কোনও নির্দিষ্ট নিয়ামকের সাথে সম্পর্কিত নয়। হতে পারে আপনি একাধিক পুনঃনির্দেশ করেন এবং টেম্পাটাটা হারাবেন? আপনি কোনও কোডের সাথে একটি নতুন প্রশ্নের সাথে লিঙ্ক করতে পারেন ...
রাফাল আলথস

আমি ফিল্টার অ্যাট্রিবিউটের অন-অনুমোদিত মেটিয়ডগুলিতে সেট করার চেষ্টা করছিলাম, কিন্তু কোনওটিই কাজ করেনি, তাই আমি ডেটা পাস করার জন্য ক্যোরিয় স্ট্রিংটি ব্যবহার করে শেষ করেছি। অন্যদিকে, কন্ট্রোলারে টেম্পাটাটা সেট করে যখন আমার পরে ফিল্টার অ্যাট্রিবিউটে পড়ার দরকার পড়ে তখন কাজ করে। ধন্যবাদ!
অ্যান্ড্রু

13

আপনি এই পরিস্থিতিতে টেম্পেটা ব্যবহার করতে পারেন। এখানে ভিউব্যাগ, ভিউডেটা এবং টেম্পডাটা সম্পর্কিত কিছু ব্যাখ্যা রয়েছে।


8

আমি এটি পছন্দ করেছিলাম ... এবং এটি আমার জন্য কাজ করছে ... এখানে আমি পাসওয়ার্ড পরিবর্তন করছি এবং সাফল্যে আমি ভিউব্যাগে সাফল্যের বার্তাটি দর্শনে প্রদর্শন করতে চাই ..

    public ActionResult ChangePass()
    {
        ChangePassword CP = new ChangePassword();
        if (TempData["status"] != null)
        {
            ViewBag.Status = "Success";
            TempData.Remove("status");
        }
        return View(CP);
    }

    [HttpPost]
    public ActionResult ChangePass(ChangePassword obj)
    {
        if (ModelState.IsValid)
        {
            int pid = Session.GetDataFromSession<int>("ssnPersonnelID");
            PersonnelMaster PM = db.PersonnelMasters.SingleOrDefault(x => x.PersonnelID == pid);

            PM.Password = obj.NewPassword;
            PM.Mdate = DateTime.Now;
            db.SaveChanges();

            TempData["status"] = "Success";
            return RedirectToAction("ChangePass");
        }

        return View(obj);
    }

3

এখান থেকে নেওয়া হয়েছে

সারসংক্ষেপ

ভিউডেটা এবং ভিউব্যাগ অবজেক্টগুলি আপনাকে সেই অতিরিক্ত টুকরো ডেটা অ্যাক্সেস করার উপায় দেয় যা আপনার মডেলের পাশাপাশি চলে যায়, তবে আরও জটিল ডেটার জন্য আপনি ভিউমোডেলে যেতে পারেন। অন্যদিকে টেম্পডেটা এইচটিটিপি পুনঃনির্দেশে ডেটা নিয়ে কাজ করার জন্য বিশেষভাবে প্রস্তুত, তাই টেম্পডেটা ব্যবহার করার সময় সতর্কতা অবলম্বন করতে ভুলবেন না।


-2

অথবা আপনি বিকল্প জন্য সেশন ব্যবহার করতে পারেন:

Session["message"] = "MyMessage";
RedirectToAction("MyAction");

এবং তারপরে যখনই আপনার প্রয়োজন হবে এটি কল করুন।

হালনাগাদ

এছাড়াও, @ জেমস তার মন্তব্যে যা বলেছে, অযাচিত জাঙ্ক ডেটা বা পুরানো মূল্য এড়াতে আপনি নির্দিষ্ট সেশনের এটি ব্যবহারের পরে বাতিল বা পরিষ্কার করতে নিরাপদ হবে।


4
আমি তাতে একমত নই। এই জন্য সেশন ব্যবহার করবেন না।
মাহমুদভিসি

2
এটি একটি বিকল্প। নির্দিষ্ট পরিস্থিতিতে এটি পছন্দনীয়।
csharpforevermore

সেশন ভেরিয়েবলগুলি এমন কয়েকটি জিনিসের জন্য দরকারী যেগুলি আপনাকে বেশ কয়েকটি পোস্ট / গেসের মধ্যে নজর রাখতে হবে। এর মতো এক-ব্যবহারের জন্য, আপনাকে এটি সাফ করার কথা মনে রাখতে হবে, বা এটি পরে জাঙ্ক ডেটা হবে, কিছু স্ক্রিনে অযাচিত প্রদর্শিত হবে বা প্রসঙ্গের বাইরে যুক্তিও সঞ্চার করবে।
জেমস

@ জেমস হুবহু, কিছু ক্ষেত্রে আমি এই পদ্ধতিটি ব্যবহার করা দরকার যা আমি করি। ব্যবহারের পরে এর মানটিকে বাতিল বা সাফ করা এই জাতীয় ক্ষেত্রে যেমন আবশ্যক।
জন পি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.