আমি ViewBag
এমভিসি ৩ তে দেখেছি 3. ViewData
এমভিসি ২ এর চেয়ে আলাদা কীভাবে ?
আমি ViewBag
এমভিসি ৩ তে দেখেছি 3. ViewData
এমভিসি ২ এর চেয়ে আলাদা কীভাবে ?
উত্তর:
এটি সি # 4.0 গতিশীল বৈশিষ্ট্য ব্যবহার করে। এটি ভিউডাটা হিসাবে একই লক্ষ্য অর্জন করে এবং দৃ strongly়ভাবে টাইপ করা ভিউ মডেলগুলি ব্যবহারের পক্ষে এড়ানো উচিত (ভিউডাটা যেমনভাবে এড়ানো উচিত)।
সুতরাং মূলত এটি যাদু স্ট্রিংয়ের প্রতিস্থাপন করে :
ViewData["Foo"]
সঙ্গে জাদু বৈশিষ্ট্য :
ViewBag.Foo
যার জন্য আপনার কোনও সংকলন সময় সুরক্ষা নেই।
আমি এমভিসিতে এই ধারণাটি সর্বদা চালু করার জন্য মাইক্রোসফ্টকে দোষ দিতে থাকি।
বৈশিষ্ট্যগুলির নাম কেস সংবেদনশীল।
অভ্যন্তরীণভাবে ViewBag বৈশিষ্ট্য নাম / মান জোড়া হিসেবে সংরক্ষণ করা হয় ViewData অভিধান ।
দ্রষ্টব্য: এমভিসি 3-র বেশিরভাগ প্রাক-রিলিজ সংস্করণগুলিতে এমভিসি 3 রিলিজ নোট থেকে এই স্নিপেটে উল্লিখিত ভিউব্যাগের সম্পত্তিটির ভিউমোডেল নামকরণ করা হয়েছিল:
(10-8-12 সম্পাদিত) এটি প্রস্তাবিত হয়েছিল যে আমি পোস্ট করা এই তথ্যের উত্সটি পোস্ট করব, এখানে উত্সটি দেওয়া হয়েছে: http://www.asp.net/ whitepapers/mvc3-release-notes#_Toc2_4
এমভিসি 2 কন্ট্রোলাররা একটি ভিউডাটা সম্পত্তি সমর্থন করে যা আপনাকে দেরীতে-সীমাবদ্ধ অভিধানের API ব্যবহার করে কোনও ভিউ টেমপ্লেটে ডেটা পাঠাতে সক্ষম করে। এমভিসি 3 তে, আপনি একই উদ্দেশ্যটি সম্পাদন করতে ভিউব্যাগের সম্পত্তিটির সাথে কিছুটা সহজ বাক্য গঠন ব্যবহার করতে পারেন। উদাহরণস্বরূপ, ভিউডেটা ["বার্তা"] = "পাঠ্য" লেখার পরিবর্তে আপনি ভিউব্যাগ.মেসেজ = "পাঠ্য" লিখতে পারেন। ভিউব্যাগের সম্পত্তিটি ব্যবহার করার জন্য আপনার কোনও দৃ strongly়-টাইপযুক্ত শ্রেণীর সংজ্ঞা দেওয়ার দরকার নেই। যেহেতু এটি একটি গতিশীল সম্পত্তি, আপনি পরিবর্তে কেবল বৈশিষ্ট্যগুলি পেতে বা সেট করতে পারেন এবং এটি চলমান সময়ে গতিশীলভাবে তাদের সমাধান করবে। অভ্যন্তরীণভাবে, ভিউব্যাগের বৈশিষ্ট্যগুলি ভিউডাটা অভিধানে নাম / মান জোড়া হিসাবে সংরক্ষণ করা হয়। (দ্রষ্টব্য: এমভিসি 3 এর বেশিরভাগ প্রাক-প্রকাশিত সংস্করণে ভিউব্যাগ সম্পত্তিটি ভিউমোডেল সম্পত্তি হিসাবে নামকরণ করা হয়েছিল))
ViewData
এবং ViewBag
না পার্থক্য জিজ্ঞাসা করে ViewModel
।
dynamic
এবং সমর্থন ViewBag.Message
। একটি পুরানো ViewData["Message"]
বাক্য গঠন ব্যবহার করে ।
এমভিসিতে ভিউবাগ বনাম ভিউডাটা
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
ভিউব্যাগ এবং ভিউডাটার মধ্যে সাদৃশ্য:
আপনি যখন নিয়ামক থেকে দেখার দিকে চলে যান তখন ডেটা বজায় রাখতে সহায়তা করে। নিয়ামক থেকে সম্পর্কিত ভিউতে ডেটা পাস করতে ব্যবহৃত হয়। সংক্ষিপ্ত জীবন মানে পুনঃনির্দেশ ঘটে যখন মান নালায় পরিণত হয়। এটি কারণ তাদের লক্ষ্যটি নিয়ামক এবং দর্শনগুলির মধ্যে কথোপকথনের একটি উপায় সরবরাহ করা। এটি সার্ভার কলের মধ্যে একটি যোগাযোগ ব্যবস্থা।
ভিউব্যাগ এবং ভিউডেটার মধ্যে পার্থক্য:
ভিউডাটা হ'ল অবজেক্টের একটি অভিধান যা ভিউডাটাডাটিরিয়াস বর্গ থেকে নেওয়া এবং কী হিসাবে স্ট্রিংগুলি ব্যবহার করে অ্যাক্সেসযোগ্য। ভিউব্যাগ একটি গতিশীল সম্পত্তি যা সি # 4.0 তে নতুন গতিশীল বৈশিষ্ট্যগুলির সুবিধা গ্রহণ করে। ভিউডাটা জটিল তথ্য প্রকারের জন্য টাইপকাস্টিং প্রয়োজন এবং ত্রুটি এড়াতে নাল মানগুলি পরীক্ষা করে। ভিউব্যাগে জটিল ডেটা টাইপের জন্য টাইপকাস্টিংয়ের প্রয়োজন হয় না।
ভিউব্যাগ এবং ভিউ ডেটা উদাহরণ:
public ActionResult Index()
{
ViewBag.Name = "Arun Prakash";
return View();
}
public ActionResult Index()
{
ViewData["Name"] = "Arun Prakash";
return View();
}
ভিউতে কল করা হচ্ছে
@ViewBag.Name
@ViewData["Name"]
typecasting
তবে আপনি টাইপকাস্টিং কীভাবে সম্পাদিত হয় তা দেখান নি
ViewData
: এটির জন্য জটিল ডেটা টাইপের জন্য টাইপ কাস্টিং এবং ত্রুটিগুলি এড়ানোর জন্য নাল মানগুলির জন্য চেক প্রয়োজন।
ViewBag
: জটিল ডাটা ধরণের জন্য এটি টাইপ কাস্টিংয়ের প্রয়োজন হয় না।
নিম্নলিখিত উদাহরণ বিবেচনা করুন:
public class HomeController : Controller
{
public ActionResult Index()
{
var emp = new Employee
{
EmpID=101,
Name = "Deepak",
Salary = 35000,
Address = "Delhi"
};
ViewData["emp"] = emp;
ViewBag.Employee = emp;
return View();
}
}
এবং এর জন্য কোডটি View
নিম্নরূপ:
@model MyProject.Models.EmpModel;
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "Welcome to Home Page";
var viewDataEmployee = ViewData["emp"] as Employee; //need type casting
}
<h2>Welcome to Home Page</h2>
This Year Best Employee is!
<h4>@ViewBag.Employee.Name</h4>
<h3>@viewDataEmployee.Name</h3>
<h4>@ViewBag.emp.Name</h4>
এ পরিবর্তিত হবে<h4>@ViewBag.Employee.Name</h4>
সমস্ত উত্তর সূচিত করে ViewBag
এবং / অথবা যা ViewData
থেকে তথ্য প্রেরণ করা Controller
হয় Views
তা ভুল তথ্য। উভয়ই ভিউ থেকে লেআউট বা আংশিক টু ভিউ (বা ভিউ উপাদানগুলি ইত্যাদি) থেকে ডেটা পাস করার জন্য খুব দরকারী are এটি কোনও নিয়ামক নয়।
ডিফল্ট হিসাবে As.net নমুনা লেআউট পৃষ্ঠায় এটি আছে:
<title>@ViewData["Title"] - MyApp</title>
এবং যে কোনও দৃষ্টিতে
ViewData["Title"] = "Details";
তাহলে দেখা যায়, প্রশ্ন জিজ্ঞাসা করুন: "কি পার্থক্য ViewBag
এবং ViewData
?"
সর্বাধিক উল্লেখযোগ্য পার্থক্য হ'ল ViewData
একটি স্ট্রোললি টাইপড ডিকশনারি তবে
ViewBag
ডায়নামিক টাইপ।
মনে রাখবেন যে ভিতরে থাকা ডেটা একই IS
ViewData["Title"] = "MyTitle";
ViewBag.Title; // returns "MyTitle";
কখন এক বা অন্য ব্যবহার করবেন?
ViewBag
বৈধ সি # নামগুলি সমর্থন করে না। আপনি এর ViewData["Key With Space"]
সাথে অ্যাক্সেস করতে পারবেন নাViewBag
ViewBag.Something
গতিশীল এবং আপনার কম্পিউটারে পদ্ধতিগুলি (এক্সটেনশন পদ্ধতিগুলির) কল করার সময় সমস্যা হতে পারে যা সংকলনের সময় সঠিক পরামিতিটি জানতে হবে।ViewBag
নালস সিনট্যাকটিকাল ক্লিনার জন্য পরীক্ষা করতে পারেন: ViewBag.Person?.Name
ViewData
মত একটি অভিধানের সব বৈশিষ্ট্য আছে ContainsKey
, Add
তাই আপনি ব্যবহার করতে পারেন, ইত্যাদি ViewData.Add("somekey", "somevalue")
মনে রাখা এটা ব্যতিক্রম ফেলে দিতে পারে।ViewData
ভিউ-এ টাইপকাস্টিং প্রয়োজন যখন ViewBag
না।সূক্ষ্ম পার্থক্যগুলি জানা, এক বা অন্যটি ব্যবহার করা আরও স্বাদের পছন্দ।
সাধারণত আপনি ViewBag.AnyKey
একটি উপনামের কথা ভাবতে পারেনViewData["AnyKey"]
আমি কি আপনাকে ব্যবহার না করার জন্য সুপারিশ করতে পারি?
আপনি যদি আপনার স্ক্রিনে ডেটা "প্রেরণ" করতে চান, তবে দৃ strongly়ভাবে টাইপ করা অবজেক্ট (এ কেএ ভিউমডেল) প্রেরণ করুন কারণ এটি পরীক্ষা করা আরও সহজ।
যদি আপনি কোনও ধরণের "মডেল" এর সাথে আবদ্ধ হন এবং এলোমেলো "ভিউব্যাগ" বা "ভিউডেটা" আইটেমগুলি রাখেন তবে এটি স্বয়ংক্রিয় পরীক্ষাকে খুব কঠিন করে তোলে।
আপনি যদি এগুলি ব্যবহার করে থাকেন তবে কীভাবে আপনি পুনর্গঠন করতে পারবেন এবং কেবলমাত্র ভিউমোডেলগুলি ব্যবহার করতে পারেন তা বিবেচনা করুন।
কিছু সূক্ষ্ম পার্থক্য রয়েছে যার অর্থ আপনি ভিউটাটা এবং ভিউব্যাগটি ভিউ থেকে কিছুটা আলাদা উপায়ে ব্যবহার করতে পারেন। একটি সুবিধা এই পোস্টে বর্ণিত হয়েছে http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx এবং দেখানো হয়েছে যে কাস্টিং উদাহরণে ভিউডাটার পরিবর্তে ভিউব্যাগ ব্যবহার করে এড়ানো যেতে পারে।
ভিউডেটা: একটি অভিধান যা ভিউ এবং কন্ট্রোলারের মধ্যে ডেটা সঞ্চয় করতে ব্যবহৃত হয়, এর থেকে ডেটা পুনরুদ্ধারে সক্ষম হওয়ার জন্য আপনাকে ভিউ ডেটা অবজেক্টটিকে তার সংশ্লিষ্ট মডেলটিতে কাস্ট করতে হবে ...
ভিউব্যাগ: ভিউ ডেটাতে এটির মতো কাজ করার মতো একটি গতিশীল সম্পত্তি, তবে এটির চেয়ে ভাল এটি ভিউতে ব্যবহার করার আগে এটির প্রতিরোধের মডেলটিতে কাস্ট করার দরকার নেই ...
নীচে ভিউডেটা, ভিউব্যাগ, টেম্পডাটা এবং সেশন সম্পর্কে পয়েন্ট পয়েন্টের পার্থক্য রয়েছে। ক্রেডিট / অনুলিপি Askforprogram.in , কোড উদাহরণের জন্য লিঙ্কটি অনুসরণ করুন যা আমি এখানে উল্লেখ করি নি।
এমভিসিতে ভিউডাটা
এমভিসিতে ভিউব্যাগ
এমভিসিতে টেম্পডাটা
এমভিসিতে অধিবেশন
অন্যটির চেয়ে একটি ফর্ম্যাট বেছে নেওয়ার ক্ষেত্রে আপনার কোনও প্রযুক্তিগত সুবিধা নাও থাকতে পারে, তবে দুটি সিনট্যাক্সের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য সম্পর্কে আপনার সচেতন হওয়া উচিত। একটি স্পষ্ট পার্থক্য হ'ল ভিউব্যাগ কেবল তখনই কাজ করে যখন আপনি যে কীটি অ্যাক্সেস করছেন তা বৈধ সি # সনাক্তকারী এর fi উদাহরণস্বরূপ, আপনি ভিউটাটা ["স্পেস সহ কী"] তে কোনও মান রাখেন, আপনি ভিউব্যাগ ব্যবহার করে সেই মানটি অ্যাক্সেস করতে পারবেন না কারণ কোডটি সংকলন করবে না। আরেকটি মূল বিষয় বিবেচনা করার বিষয় হ'ল আপনি এক্সটেনশন পদ্ধতির পরামিতি হিসাবে গতিশীল মানগুলিতে পাস করতে পারবেন না। সঠিক এক্সটেনশন পদ্ধতিটি চয়ন করতে সি # সংকলককে অবশ্যই প্রতিটি প্যারামিটারের প্রকৃত প্রকারটি কমপাইল সময়ে জানতে হবে। যদি কোনও প্যারামিটার গতিশীল হয় তবে সংকলন ব্যর্থ হবে। উদাহরণস্বরূপ, এই কোডটি সর্বদা ব্যর্থ হবে: @ এইচটিএমএল.টেক্সটবক্স ("নাম", ভিউব্যাগ.নাম)। এটি প্রায় কাজ করতে হয় হয় ভিউডাটা ব্যবহার করুন ["নাম"
public ActionResult Index()
{
ViewBag.Name = "Monjurul Habib";
return View();
}
public ActionResult Index()
{
ViewData["Name"] = "Monjurul Habib";
return View();
}
In View:
@ViewBag.Name
@ViewData["Name"]
এইভাবে আমরা এটিএমপি ডেটা সহ অন্য পৃষ্ঠায় নিয়ামকের মধ্যকার তথ্য পাস করার জন্য মানগুলি ব্যবহার করতে পারি
ভিউডেটা এবং ভিউব্যাগের মধ্যে আমি একটি প্রধান পার্থক্য লক্ষ্য করেছি:
ভিউডেটা: এটি আপনাকে কী অর্পণ করেছে তাতে কিছু আসে যায় না এবং এটি আবার মূল টাইপতে টাইপকাস্ট করার দরকার পড়ে না object
ভিউব্যাগ: আপনি যা নির্দিষ্ট করেছেন তা হুবহু টাইপ করতে এটি যথেষ্ট স্মার্ট, আপনি সাধারণ টাইপ (যেমন int, স্ট্রিং ইত্যাদি) বা জটিল টাইপকে আবশ্যক আবহাওয়া বিবেচনা করে না।
প্রাক্তন: কন্ট্রোলার কোড।
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
Products p1 = new Products();
p1.productId = 101;
p1.productName = "Phone";
Products p2 = new Products();
p2.productId = 102;
p2.productName = "laptop";
List<Products> products = new List<Products>();
products.Add(p1);
products.Add(p2);
ViewBag.Countries = products;
return View();
}
}
public class Products
{
public int productId { get; set; }
public string productName { get; set; }
}
}
কোড দেখুন।
<ul>
@foreach (WebApplication1.Controllers.Products item in ViewBag.Countries)
{
<li>@item.productId @item.productName</li>
}
</ul>
আউটপুট স্ক্রিন।
ডেটা দেখুন
http://www.gurujipoint.com/2017/09/view-data-viewbag-and-tempdata.html
এখানে ViewData এবং ViewBag উভয়ই নিয়ন্ত্রণকারীর থেকে ভিউতে পাস ডেটা ব্যবহার করা হয় ।
1. ভিউডাটা
- ভিউডাটা হ'ল ডিকশনারি অবজেক্ট যা ভিউডাটাডিক্টোনারি ক্লাস থেকে নেওয়া ।
- ডেটা কেবলমাত্র একটি অনুরোধের জন্য অনুমতি দেয়, পৃষ্ঠা পুনর্নির্দেশ ঘটে তখন ভিউডাটা মানগুলি পরিষ্কার হয়ে যায়।
- ভিউডাটা মানটি ব্যবহারের আগে ক্যাট টাইপ করতে হবে।
উদাহরণ: নিয়ামক মধ্যে
public ActionResult PassingDatatoViewWithViewData()
{
ViewData["Message"] = "This message shown in view with the ViewData";
return View();
}
দেখুন
@ViewData["Message"];
- ভিউ ডেটা সহ কী এবং মানের মতো একটি জুটি , বার্তাটি কী এবং বিপরীত কমা মানটি মান value
- ডেটা সহজ তাই ডেটা জটিল হলে টাইপ কাস্টিং ব্যবহার করে আমরা এখানে টাইপকাস্টিং ব্যবহার করতে পারি না।
public ActionResult PassingDatatoViewWithViewData()
{
var type= new List<string>
{
"MVC",
"MVP",
"MVVC"
};
ViewData["types"] = type;
return View();
}
- ভিউতে ডেটা হিসাবে বের করা যেতে পারে
<ul>
@foreach (var items in (List<string>)ViewData["types"])
{
<li>@items</li>
}
</ul>
2. ভিউব্যাগ
--ভিউব্যাগটি ডায়নামিক বৈশিষ্ট্যটি ব্যবহার করে Dউইউ ডেটাটির চারপাশে ভিউব্যাগ মোড়ক।
- ভিউব্যাগে ধরণের কাস্টিং প্রয়োজন।
- ভিউডাটা হিসাবে একই, যদি পুনঃনির্দেশ ঘটে তবে মানটি নাল হয়ে যায়।
উদাহরণ:
public ActionResult PassingDatatoViewWithViewBag()
{
ViewData.Message = "This message shown in view with the ViewBag";
return View();
}
দেখুন
@ViewBag.vbMessage
- জটিল ধরণের জন্য ভিউব্যাগ ব্যবহার করুন
public ActionResult PassingDatatoViewWithViewBag()
{
var type= new List<string>
{
"MVC",
"MVP",
"MVVC"
};
ViewBag.types = type;
return View();
}
- ভিউতে ডেটা হিসাবে বের করা যেতে পারে
<ul>
@foreach (var items in ViewBag.types)
{
<li>@items</li>
}
</ul>
- মূল পার্থক্য হ'ল ভিউব্যাগের জন্য টাইপকাস্টিংয়ের প্রয়োজন হয় না তবে ভিউড্যাটা টাইপকাস্টিং প্রয়োজন।
ভিউব্যাগ এবং ভিউ ডেটা দুটি উপায় যা এএসপি.নেট এমভিসিতে দেখার জন্য নিয়ামক থেকে তথ্য পাস করার জন্য ব্যবহৃত হয়। উভয় প্রক্রিয়া ব্যবহারের লক্ষ্য হ'ল নিয়ামক এবং দর্শন মধ্যে যোগাযোগ ব্যবস্থা সরবরাহ করা। উভয়েরই সংক্ষিপ্ত জীবন রয়েছে যা পুনঃনির্দেশটি আসার পরে উভয়ের মানই শূন্য হয়ে যায় অর্থাত্ একবার পৃষ্ঠার উত্স পৃষ্ঠা থেকে (যেখানে আমরা ভিউব্যাগ বা ভিউডাটার মান সেট করি) লক্ষ্য পৃষ্ঠায় পুনর্নির্দেশ করি, উভয়ই ভিউব্যাগ পাশাপাশি ভিউডাটা নাল হয়ে যায়
এই দুটি মিলের সত্ত্বেও (ভিউব্যাগ এবং ভিউ ডেটা) দুটি ভিন্ন জিনিস যদি আমরা উভয়ের বাস্তবায়ন সম্পর্কে কথা বলি। পার্থক্যগুলি নিম্নরূপ:
১) যদি আমরা উভয় বাস্তবায়ন অনুসারে বিশ্লেষণ করি তবে আমরা দেখতে পাবো যে ভিউডাটা একটি অভিধানের ডেটা স্ট্রাকচার - ভিউডাটাডিয় অভিধান থেকে প্রাপ্ত অবজেক্টের অভিধান এবং এই মানগুলির কী হিসাবে স্ট্রিং ব্যবহার করে অ্যাক্সেসযোগ্য যখন ভিউব্যাগ সি # 4.0 এবং প্রবর্তিত গতিশীল বৈশিষ্ট্যগুলি ব্যবহার করে makes একটি গতিশীল সম্পত্তি।
২) ভ্যুডাটা ফর্মগুলি অ্যাক্সেস করার সময়, আমাদের ভিউডাটা অভিধানে অবজেক্ট হিসাবে সংরক্ষণ করা হয় বলে মানগুলি (ডাটা্যাটাইপস) টাইপকাস্ট করা দরকার তবে ভিউব্যাগের ক্ষেত্রে আমরা যদি মানটি ব্যবহার করি তবে এর দরকার নেই।
৩) ভিউব্যাগে আমরা এর মতো মান সেট করতে পারি:
ViewBag.Name = "Value";
এবং নিম্নলিখিত হিসাবে অ্যাক্সেস করতে পারেন:
@ViewBag.Name
ভিউডাটার ক্ষেত্রে মানগুলি নিম্নরূপে সেট এবং অ্যাক্সেস করা যায়: ভিউডাটা নীচে হিসাবে সেট করা:
ViewData["Name"] = "Value";
এবং এই মত মান অ্যাক্সেস
@ViewData["Name"]
আরও তথ্যের জন্য এখানে ক্লিক করুন: