1) TempData
আপনাকে এমন ডেটা সঞ্চয় করতে দেয় যা পুনঃনির্দেশের জন্য বেঁচে থাকবে। অভ্যন্তরীণভাবে এটি সেশনটিকে ব্যাকিং স্টোর হিসাবে ব্যবহার করে, পুনর্নির্দেশ করার পরে ডেটা স্বয়ংক্রিয়ভাবে উচ্ছেদ হয়ে যায়। নিদর্শনটি নিম্নলিখিত:
public ActionResult Foo()
{
// store something into the tempdata that will be available during a single redirect
TempData["foo"] = "bar";
// you should always redirect if you store something into TempData to
// a controller action that will consume this data
return RedirectToAction("bar");
}
public ActionResult Bar()
{
var foo = TempData["foo"];
...
}
2) ভিউব্যাগ, ভিউডেটা
আপনাকে এমন কোনও নিয়ামক ক্রিয়ায় ডেটা সংরক্ষণ করার অনুমতি দেয় যা সংশ্লিষ্ট ভিউতে ব্যবহৃত হবে। এটি ধরে নিয়েছে যে ক্রিয়াটি একটি দর্শন দেয় এবং পুনর্নির্দেশ করে না। শুধুমাত্র বর্তমান অনুরোধের সময় বেঁচে থাকে।
নিদর্শনটি নিম্নলিখিত:
public ActionResult Foo()
{
ViewBag.Foo = "bar";
return View();
}
এবং দেখুন:
@ViewBag.Foo
বা ভিউডাটা সহ:
public ActionResult Foo()
{
ViewData["Foo"] = "bar";
return View();
}
এবং দেখুন:
@ViewData["Foo"]
ViewBag
কেবল চারদিকে একটি গতিশীল র্যাপার ViewData
এবং এটি কেবল এএসপি.নেট এমভিসি 3 তে বিদ্যমান।
এটি বলা হচ্ছে, এই দুটি নির্মাণের কোনওটিই ব্যবহার করা উচিত নয়। আপনার দেখার মডেল এবং দৃ strongly়ভাবে টাইপ করা ভিউ ব্যবহার করা উচিত। সুতরাং সঠিক নিদর্শনটি নিম্নলিখিত:
মডেল দেখুন:
public class MyViewModel
{
public string Foo { get; set; }
}
কর্ম:
public Action Foo()
{
var model = new MyViewModel { Foo = "bar" };
return View(model);
}
শক্তভাবে টাইপ করা ভিউ:
@model MyViewModel
@Model.Foo
এই সংক্ষিপ্ত পরিচিতির পরে আসুন আপনার প্রশ্নের উত্তর দিন:
আমার প্রয়োজনটি হ'ল আমি কোনও নিয়ামকের মধ্যে একটি মান সেট করতে চাই, যে নিয়ামকটি কন্ট্রোলটারকে পুনর্নির্দেশ করবে এবং কন্ট্রোলার 2 ভিউ রেন্ডার করবে।
public class OneController: Controller
{
public ActionResult Index()
{
TempData["foo"] = "bar";
return RedirectToAction("index", "two");
}
}
public class TwoController: Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Foo = TempData["foo"] as string
};
return View(model);
}
}
এবং সম্পর্কিত ভিউ ( ~/Views/Two/Index.cshtml
):
@model MyViewModel
@Html.DisplayFor(x => x.Foo)
টেম্পাটাটা ব্যবহার করার ক্ষেত্রেও ত্রুটি রয়েছে: যদি ব্যবহারকারী লক্ষ্য পৃষ্ঠায় F5 এ আঘাত করে তবে ডেটা নষ্ট হয়ে যাবে।
ব্যক্তিগতভাবে আমি টেম্পडेটাও ব্যবহার করি না। এটি কারণ অভ্যন্তরীণভাবে এটি সেশন ব্যবহার করে এবং আমি আমার অ্যাপ্লিকেশনগুলিতে সেশনটি অক্ষম করি। আমি এটি অর্জনের জন্য আরও বিশ্রামের উপায় পছন্দ করি। যা হ'ল: প্রথম কন্ট্রোলার অ্যাকশনে যা আপনার ডেটা স্টোরটিতে পুনর্নির্দেশের স্টোরটিকে এবং আপনার পুনঃনির্দেশের সময় উত্পন্ন অনন্য আইডি ব্যবহার করে store তারপরে টার্গেট অ্যাকশনে প্রাথমিকভাবে সঞ্চিত বস্তুটি ফিরিয়ে আনতে এই আইডিটি ব্যবহার করুন:
public class OneController: Controller
{
public ActionResult Index()
{
var id = Repository.SaveData("foo");
return RedirectToAction("index", "two", new { id = id });
}
}
public class TwoController: Controller
{
public ActionResult Index(string id)
{
var model = new MyViewModel
{
Foo = Repository.GetData(id)
};
return View(model);
}
}
মতামত একই থাকে।