ভিউটাটা এবং ভিউব্যাগের মধ্যে পার্থক্য কী?


উত্তর:


388

এটি সি # 4.0 গতিশীল বৈশিষ্ট্য ব্যবহার করে। এটি ভিউডাটা হিসাবে একই লক্ষ্য অর্জন করে এবং দৃ strongly়ভাবে টাইপ করা ভিউ মডেলগুলি ব্যবহারের পক্ষে এড়ানো উচিত (ভিউডাটা যেমনভাবে এড়ানো উচিত)।

সুতরাং মূলত এটি যাদু স্ট্রিংয়ের প্রতিস্থাপন করে :

ViewData["Foo"]

সঙ্গে জাদু বৈশিষ্ট্য :

ViewBag.Foo

যার জন্য আপনার কোনও সংকলন সময় সুরক্ষা নেই।

আমি এমভিসিতে এই ধারণাটি সর্বদা চালু করার জন্য মাইক্রোসফ্টকে দোষ দিতে থাকি।

বৈশিষ্ট্যগুলির নাম কেস সংবেদনশীল।


11
আপনি কী উদ্দেশ্যে মাইক্রোসফ্ট্টকে দোষ দিচ্ছেন? ভিউডেটা না হলে কীভাবে আমরা মডেল থেকে ড্রপডাউনলিস্টকে বাঁধতে পারি। (আমি মনে করি না মডেলের অভ্যন্তরের নির্বাচনী তালিকাটি ব্যবহার করা ভাল ধারণা হবে)
সাবিন জ্যাকব

15
@ সুবিনজ্যাকব আপনার যদি উত্তরটি চান তবে আপনার সত্যই একটি নতুন প্রশ্ন করা উচিত। একটি নির্বাচন তালিকা তৈরি করা অবশ্যই একটি ড্রপডাউনলিস্টে যাওয়ার উপায়।
মিনিআরগনারোক

25
আমি মনে করি এটি কিছুটা সাবজেক্টিভ। শক্তিশালী ভাবে টাইপ মডেল চমৎকার এবং সাদামাটা পাঠ্য, কিন্তু পরিস্থিতিতে যেখানে আপনি দ্রুত আপ একটি দৃশ্য পেয়ে থাকেন এবং চলমান, ViewBag এবং একইভাবে কাজ কন্ট্রোলার, দেখুন, মডেল, AutoMapper ViewModel, ইত্যাদি চেয়ে দ্রুত কাজের জন্য
ক্রেগ ব্রেট

11
@ ডারিন, আপনি কেন মাইক্রোসফ্টকে এটি চালু করার জন্য "দোষারোপ" করেন? এটি কেবলমাত্র একটি সরঞ্জাম বিকাশকারীদের দেওয়া। আপনি যদি জানেন যে আপনি কী করছেন তবে আপনি এটি থেকে সর্বাধিক উপার্জন করতে পারেন। আপনি যদি এটি পছন্দ করেন না বা ত্রুটিযুক্ত হওয়ার ঝুঁকির মতো বেশি বোধ করেন তবে কেবল এটি ব্যবহার করবেন না। :)
বিলাল ফজলানী

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

42

অভ্যন্তরীণভাবে 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"]বাক্য গঠন ব্যবহার করে ।
ম্যাথু ফ্ল্যাশেন

1
+1 তবে, আপনি কোন উত্স থেকে উদ্ধৃতি দিচ্ছেন ...? সত্যিই একটি লিঙ্ক সরবরাহ করা উচিত।
স্যাম

1
স্যাম আপনাকে পরামর্শের জন্য ধন্যবাদ। আমি মূল উত্সটিতে একটি লিঙ্ক যুক্ত করেছি।
ধনী বিয়ানকো

34

এমভিসিতে ভিউবাগ বনাম ভিউডাটা

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"]

7
আপনার উত্তরটি নির্দেশ করে typecastingতবে আপনি টাইপকাস্টিং কীভাবে সম্পাদিত হয় তা দেখান নি
অ্যালেক্স

31

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>

6
আমাকে আনস্ট্যান্ডেণ্ডে সহায়তা করুন তবে আমি মনে করি একটি ভুল আছে। এই <h4>@ViewBag.emp.Name</h4> এ পরিবর্তিত হবে<h4>@ViewBag.Employee.Name</h4>
বেনি Margalit

24

সমস্ত উত্তর সূচিত করে 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"]


1
এটি একটি গ্রহণযোগ্য উত্তর হওয়া উচিত!
প্রশান্ত পিম্পলে

14

আমি কি আপনাকে ব্যবহার না করার জন্য সুপারিশ করতে পারি?

আপনি যদি আপনার স্ক্রিনে ডেটা "প্রেরণ" করতে চান, তবে দৃ strongly়ভাবে টাইপ করা অবজেক্ট (এ কেএ ভিউমডেল) প্রেরণ করুন কারণ এটি পরীক্ষা করা আরও সহজ।

যদি আপনি কোনও ধরণের "মডেল" এর সাথে আবদ্ধ হন এবং এলোমেলো "ভিউব্যাগ" বা "ভিউডেটা" আইটেমগুলি রাখেন তবে এটি স্বয়ংক্রিয় পরীক্ষাকে খুব কঠিন করে তোলে।

আপনি যদি এগুলি ব্যবহার করে থাকেন তবে কীভাবে আপনি পুনর্গঠন করতে পারবেন এবং কেবলমাত্র ভিউমোডেলগুলি ব্যবহার করতে পারেন তা বিবেচনা করুন।


4
"সংকলকটি প্রথম ইউনিট পরীক্ষা" উপেক্ষা করে কীভাবে একটি স্ট্যাটিকালি টাইপ করা ভিউ মডেল আপনার কোডটিকে ডায়নামিক টাইপের চেয়ে আরও পরীক্ষামূলক করে তোলে? পরীক্ষাগুলির প্রয়োজনীয়তা গতিশীল টাইপযুক্ত সমাধানে আরও গুরুত্বপূর্ণ, যদি উভয় সমাধান একই নম্বর এবং পরীক্ষার ধরণের প্রয়োগ করে তবে আপনি কিছুই হারান না।
ড্যারেন লুইস

আমি একমত, এটি কিছুটা অস্পষ্ট। সম্ভবত ইন্টেলিজেন্স জড়িত।
জোশুয়া রামিরেজ

1
একটি উদাহরণ উপহাস করা হবে। যদি আপনি একটি নিয়ামক ক্রিয়াকে পরীক্ষা করতে চান তবে কোনও "স্ট্রোক" কিছু অভিধানে যুক্ত করা হয়েছে বা কিছু গতিশীল ক্ষেত্রটি কিছু মানকে সেট করা হয়েছে - এটি দৃ around় করে বলার পরিবর্তে "মক" অবজেক্টটি প্রায় কাছাকাছি যাওয়ার পক্ষে তৈরি করা আরও সহজ - এটি হ'ল একাধিক পরামিতি গ্রহণ না করে একটি "অনুরোধ" এবং একটি "প্রতিক্রিয়া" অবজেক্ট থাকা পরিষেবার চুক্তির অনুরূপ ধারণা।
নোটন

আপনি যদি না ব্যবহার করেন তবে ভিউ থেকে লেআউটে ডেটা কীভাবে পাস করবেন? -1
বার্ট ক্যালিক্স্টো

এ কেমন উত্তর?
JSON

11

কিছু সূক্ষ্ম পার্থক্য রয়েছে যার অর্থ আপনি ভিউটাটা এবং ভিউব্যাগটি ভিউ থেকে কিছুটা আলাদা উপায়ে ব্যবহার করতে পারেন। একটি সুবিধা এই পোস্টে বর্ণিত হয়েছে http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx এবং দেখানো হয়েছে যে কাস্টিং উদাহরণে ভিউডাটার পরিবর্তে ভিউব্যাগ ব্যবহার করে এড়ানো যেতে পারে।


6

ভিউডেটা: একটি অভিধান যা ভিউ এবং কন্ট্রোলারের মধ্যে ডেটা সঞ্চয় করতে ব্যবহৃত হয়, এর থেকে ডেটা পুনরুদ্ধারে সক্ষম হওয়ার জন্য আপনাকে ভিউ ডেটা অবজেক্টটিকে তার সংশ্লিষ্ট মডেলটিতে কাস্ট করতে হবে ...

ভিউব্যাগ: ভিউ ডেটাতে এটির মতো কাজ করার মতো একটি গতিশীল সম্পত্তি, তবে এটির চেয়ে ভাল এটি ভিউতে ব্যবহার করার আগে এটির প্রতিরোধের মডেলটিতে কাস্ট করার দরকার নেই ...


4

নীচে ভিউডেটা, ভিউব্যাগ, টেম্পডাটা এবং সেশন সম্পর্কে পয়েন্ট পয়েন্টের পার্থক্য রয়েছে। ক্রেডিট / অনুলিপি Askforprogram.in , কোড উদাহরণের জন্য লিঙ্কটি অনুসরণ করুন যা আমি এখানে উল্লেখ করি নি।

  1. এমভিসিতে ভিউডাটা

    • ভিউডেটা কন্ট্রোলারবেস ক্লাসের সম্পত্তি।
    • ভিউডাটা হ'ল একধরনের অভিধান অবজেক্ট।
    • ভিউডেটা মূল-মান অভিধানের সংগ্রহ dictionary
    • ভিভিডাটা এমভিসি 1.0 সংস্করণে চালু হয়েছিল।
    • ViewData .NET ফ্রেমওয়ার্ক 3.5 এবং এর উপরের সাথে কাজ করে।
    • গণনার সময় কোডের ধরণের রূপান্তর করতে হবে।
    • ভিউডাটা অবজেক্ট কেবল বর্তমান অনুরোধের জন্য ডেটা রাখে।
  2. এমভিসিতে ভিউব্যাগ

    • ভিউব্যাগটি কন্ট্রোলারবেস শ্রেণীর সম্পত্তি।
    • ভিউব্যাগ হ'ল এক ধরণের গতিশীল অবজেক্ট।
    • ভিউব্যাগ একটি ধরণের অবজেক্ট।
    • ভিভিব্যাগটি এমভিসি 3.0 সংস্করণে চালু হয়েছিল।
    • ভিউবাগ। নেট ফ্রেমওয়ার্ক 4.0 এবং তারপরের সাথে কাজ করে।
    • ভিউব্যাগ সম্পত্তি ব্যবহার করে এবং এটি পরিচালনা করে, সুতরাং গণনার সময় টাইপ রূপান্তর করার দরকার নেই।
    • ভিউব্যাগ অবজেক্ট কেবল বর্তমান অনুরোধের জন্য ডেটা রাখে।
  3. এমভিসিতে টেম্পডাটা

    • টেম্পাটাটা হ'ল কন্ট্রোলারবেস ক্লাসের সম্পত্তি।
    • টেম্পডাটা হ'ল এক ধরণের অভিধান অবজেক্ট।
    • টেম্পডেটা মূল-মান অভিধানের সংগ্রহ collection
    • টেম্পাটাটা এমভিসি 1.0 সংস্করণে চালু হয়েছিল।
    • টেম্পডাটা .NET ফ্রেমওয়ার্ক 3.5 এবং এর উপরের সাথে কাজ করে।
    • গণনার সময় কোডের ধরণের রূপান্তর করতে হবে।
    • টেম্পডাটা অবজেক্টটি বর্তমান অনুরোধ এবং পরবর্তী অনুরোধের মধ্যে ডেটাতে ব্যবহৃত হয়।
  4. এমভিসিতে অধিবেশন

    • সেশনটি নিয়ন্ত্রকের সম্পত্তি (বিমূর্ত শ্রেণি)।
    • সেশনটি এক প্রকারের এইচটিটিপিএসসেশনস্টেটবেস।
    • সেশনটি মূল-মূল অভিধান সংগ্রহ।
    • এমভিসি 1.0 সংস্করণে সেশনটি চালু হয়েছিল।
    • টেম্পডাটা .NET ফ্রেমওয়ার্ক 1.0 এবং উপরের সাথে কাজ করে।
    • গণনার সময় কোডের ধরণের রূপান্তর করতে হবে।
    • সেশন অবজেক্ট সমস্ত অনুরোধের জন্য ডেটা রাখে। সমস্ত অনুরোধের জন্য বৈধ, কখনই মেয়াদ শেষ হয় না।

1

অন্যটির চেয়ে একটি ফর্ম্যাট বেছে নেওয়ার ক্ষেত্রে আপনার কোনও প্রযুক্তিগত সুবিধা নাও থাকতে পারে, তবে দুটি সিনট্যাক্সের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য সম্পর্কে আপনার সচেতন হওয়া উচিত। একটি স্পষ্ট পার্থক্য হ'ল ভিউব্যাগ কেবল তখনই কাজ করে যখন আপনি যে কীটি অ্যাক্সেস করছেন তা বৈধ সি # সনাক্তকারী এর fi উদাহরণস্বরূপ, আপনি ভিউটাটা ["স্পেস সহ কী"] তে কোনও মান রাখেন, আপনি ভিউব্যাগ ব্যবহার করে সেই মানটি অ্যাক্সেস করতে পারবেন না কারণ কোডটি সংকলন করবে না। আরেকটি মূল বিষয় বিবেচনা করার বিষয় হ'ল আপনি এক্সটেনশন পদ্ধতির পরামিতি হিসাবে গতিশীল মানগুলিতে পাস করতে পারবেন না। সঠিক এক্সটেনশন পদ্ধতিটি চয়ন করতে সি # সংকলককে অবশ্যই প্রতিটি প্যারামিটারের প্রকৃত প্রকারটি কমপাইল সময়ে জানতে হবে। যদি কোনও প্যারামিটার গতিশীল হয় তবে সংকলন ব্যর্থ হবে। উদাহরণস্বরূপ, এই কোডটি সর্বদা ব্যর্থ হবে: @ এইচটিএমএল.টেক্সটবক্স ("নাম", ভিউব্যাগ.নাম)। এটি প্রায় কাজ করতে হয় হয় ভিউডাটা ব্যবহার করুন ["নাম"


0
public ActionResult Index()
{
    ViewBag.Name = "Monjurul Habib";
    return View();
}

public ActionResult Index()
{
    ViewData["Name"] = "Monjurul Habib";
    return View();
} 

In View:

@ViewBag.Name 
@ViewData["Name"] 

0

এইভাবে আমরা এটিএমপি ডেটা সহ অন্য পৃষ্ঠায় নিয়ামকের মধ্যকার তথ্য পাস করার জন্য মানগুলি ব্যবহার করতে পারি


0

ভিউডেটা এবং ভিউব্যাগের মধ্যে আমি একটি প্রধান পার্থক্য লক্ষ্য করেছি:

ভিউডেটা: এটি আপনাকে কী অর্পণ করেছে তাতে কিছু আসে যায় না এবং এটি আবার মূল টাইপতে টাইপকাস্ট করার দরকার পড়ে না 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 &nbsp;&nbsp;&nbsp;@item.productName</li>
            }
        </ul>

আউটপুট স্ক্রিন।

এখানে চিত্র বর্ণনা লিখুন


0

ডেটা দেখুন

  1. ViewData দেখার জন্য নিয়ন্ত্রণকারীর থেকে ডেটা পাস করার জন্য ব্যবহৃত হয়
  2. ভিউডাটা ভিউ ডেটাডিয়েশনারি ক্লাস থেকে প্রাপ্ত এবং মূলত একটি অভিধান অবজেক্ট অর্থাৎ কী এবং মান যেখানে কীগুলি স্ট্রিং থাকে যখন মানগুলি বস্তু হবে।
  3. ডেটা টাইপকাস্টিংয়ের প্রয়োজন ভিউডাটা থেকে ডেটা পুনরায় নেওয়ার সময় তার অবজেক্টের ধরণের ডেটা এবং এটিও বাতিল করে দেয় ভ্যালু চেক বেফ টাইপ কাস্টিং অন্যথায় এটি অ্যাপ্লিকেশনটি ভেঙে দেবে। যদি পুনঃনির্দেশটি দেখা দেয়, তবে এর মানটি শূন্য হয়ে যায় টেম্পডাটা ভিউ ডেটা এবং ভিউ ব্যাগের মধ্যে সম্পূর্ণ পার্থক্য

http://www.gurujipoint.com/2017/09/view-data-viewbag-and-tempdata.html


0
ViewData
  1. ViewData দেখার জন্য নিয়ন্ত্রণকারীর থেকে ডেটা পাস করার জন্য ব্যবহৃত হয়
  2. এটি ভিউডাটাডিয়েশনারি ক্লাস থেকে প্রাপ্ত
  3. এটি কেবলমাত্র বর্তমান অনুরোধের জন্য উপলব্ধ
  4. জটিল ডেটা টাইপের জন্য টাইপকাস্টিং এবং ত্রুটি এড়াতে নাল মানগুলির জন্য চেক করা প্রয়োজন
  5. যদি পুনঃনির্দেশটি ঘটে থাকে তবে এর মানটি নাল হয়ে যায়
ViewBag
  1. কন্ট্রোলার থেকে সম্পর্কিত ভিউতে ডেটা পাস করার জন্য ভিউব্যাগও ব্যবহৃত হয়
  2. ভিউব্যাগ একটি গতিশীল সম্পত্তি যা সি # 4.0 তে নতুন গতিশীল বৈশিষ্ট্যগুলির সুবিধা গ্রহণ করে
  3. এটি কেবলমাত্র বর্তমান অনুরোধের জন্য উপলব্ধ
  4. যদি পুনঃনির্দেশটি ঘটে থাকে তবে এর মানটি নাল হয়ে যায়
  5. জটিল ডেটা টাইপের জন্য টাইপকাস্টিংয়ের প্রয়োজন হয় না

0

এখানে 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>

- মূল পার্থক্য হ'ল ভিউব্যাগের জন্য টাইপকাস্টিংয়ের প্রয়োজন হয় না তবে ভিউড্যাটা টাইপকাস্টিং প্রয়োজন।


-1

ভিউব্যাগ এবং ভিউ ডেটা দুটি উপায় যা এএসপি.নেট এমভিসিতে দেখার জন্য নিয়ামক থেকে তথ্য পাস করার জন্য ব্যবহৃত হয়। উভয় প্রক্রিয়া ব্যবহারের লক্ষ্য হ'ল নিয়ামক এবং দর্শন মধ্যে যোগাযোগ ব্যবস্থা সরবরাহ করা। উভয়েরই সংক্ষিপ্ত জীবন রয়েছে যা পুনঃনির্দেশটি আসার পরে উভয়ের মানই শূন্য হয়ে যায় অর্থাত্ একবার পৃষ্ঠার উত্স পৃষ্ঠা থেকে (যেখানে আমরা ভিউব্যাগ বা ভিউডাটার মান সেট করি) লক্ষ্য পৃষ্ঠায় পুনর্নির্দেশ করি, উভয়ই ভিউব্যাগ পাশাপাশি ভিউডাটা নাল হয়ে যায়

এই দুটি মিলের সত্ত্বেও (ভিউব্যাগ এবং ভিউ ডেটা) দুটি ভিন্ন জিনিস যদি আমরা উভয়ের বাস্তবায়ন সম্পর্কে কথা বলি। পার্থক্যগুলি নিম্নরূপ:

১) যদি আমরা উভয় বাস্তবায়ন অনুসারে বিশ্লেষণ করি তবে আমরা দেখতে পাবো যে ভিউডাটা একটি অভিধানের ডেটা স্ট্রাকচার - ভিউডাটাডিয় অভিধান থেকে প্রাপ্ত অবজেক্টের অভিধান এবং এই মানগুলির কী হিসাবে স্ট্রিং ব্যবহার করে অ্যাক্সেসযোগ্য যখন ভিউব্যাগ সি # 4.0 এবং প্রবর্তিত গতিশীল বৈশিষ্ট্যগুলি ব্যবহার করে makes একটি গতিশীল সম্পত্তি।

২) ভ্যুডাটা ফর্মগুলি অ্যাক্সেস করার সময়, আমাদের ভিউডাটা অভিধানে অবজেক্ট হিসাবে সংরক্ষণ করা হয় বলে মানগুলি (ডাটা্যাটাইপস) টাইপকাস্ট করা দরকার তবে ভিউব্যাগের ক্ষেত্রে আমরা যদি মানটি ব্যবহার করি তবে এর দরকার নেই।

৩) ভিউব্যাগে আমরা এর মতো মান সেট করতে পারি:

      ViewBag.Name = "Value"; 

এবং নিম্নলিখিত হিসাবে অ্যাক্সেস করতে পারেন:

          @ViewBag.Name

ভিউডাটার ক্ষেত্রে মানগুলি নিম্নরূপে সেট এবং অ্যাক্সেস করা যায়: ভিউডাটা নীচে হিসাবে সেট করা:

ViewData["Name"] = "Value";

এবং এই মত মান অ্যাক্সেস

 @ViewData["Name"] 

আরও তথ্যের জন্য এখানে ক্লিক করুন:


2
দুঃখিত আমি হ্রাস পেয়েছি তবে এই উত্তরটি দরকারী কিছু বলতে বেশ কয়েকটি অনুচ্ছেদে লাগে। গৃহীত উত্তরটি থেকে দরকারী জিনিসটি হ'ল বাক্যটি হবে "ভিউবাগটি ভিউডাটার চারপাশে একটি গতিময় মোড়ক" যা আমি rachalappel.com/…
ক্রিস এফ ক্যারল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.