Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# ASP.NET MVC में ViewBag का उपयोग कैसे करें?

ViewBag C# 4.0 में पेश की गई डायनामिक फीचर का उपयोग करता है। यह एक ऑब्जेक्ट को डायनामिकली प्रॉपर्टीज जोड़ने की अनुमति देता है। आंतरिक रूप से, यह ControllerBase क्लास की एक डायनामिक टाइप प्रॉपर्टी है जो Controller क्लास का बेस क्लास है।

ViewData से ViewBag के अंतर

विशेषताViewDataViewBag
सिंटैक्सViewData["Key"]ViewBag.Key
टाइपViewDataDictionarydynamic (ExpandoObject)
कंपाइल-टाइम चेकिंगनहींनहीं
इंटेलीसेंसनहींसीमित (डायनामिक)
नल हैंडलिंगकास्टिंग आवश्यकनल रेफरेंस एक्सेप्शन संभव

ViewBag में डेटा स्टोर करना

ViewBag.Countries = countriesList;

ViewBag से डेटा रिट्रीव करना

string country = ViewBag.Countries;

महत्वपूर्ण विशेषताएं

  • केवल कंट्रोलर से व्यू में डेटा ट्रांसफर करता है (वन-वे)
  • रिडायरेक्शन होने पर ViewBag वैल्यूज नल हो जाती हैं
  • डायनामिकली वैल्यू सेट और गेट कर सकते हैं
  • कन्वर्जन के बिना किसी भी संख्या में अतिरिक्त फील्ड्स जोड़ सकते हैं

उदाहरण: कंट्रोलर

using System.Collections.Generic;
using System.Web.Mvc;

namespace DemoMvcApplication.Controllers
{
    public class HomeController : Controller
    {
        public ViewResult Index()
        {
            ViewBag.Countries = new List
            {
                "India",
                "Malaysia",
                "Dubai",
                "USA",
                "UK"
            };
            
            // एकाधिक प्रॉपर्टीज डायनामिकली
            ViewBag.PageTitle = "Countries List";
            ViewBag.CurrentUser = "Admin";
            ViewBag.ItemCount = 5;
            ViewBag.IsActive = true;
            
            return View();
        }
    }
}

उदाहरण: व्यू (Index.cshtml)

@{
    ViewBag.Title = "Countries List";
}

Countries List

    @foreach (string country in ViewBag.Countries) {
  • @country
  • }

Page Title: @ViewBag.PageTitle

User: @ViewBag.CurrentUser

Count: @ViewBag.ItemCount

Status: @(ViewBag.IsActive ? "Active" : "Inactive")

आउटपुट

C# ASP.NET MVC में ViewBag का उपयोग कैसे करें?

एडवांस्ड: ViewBag के साथ डायनामिक ऑब्जेक्ट्स

public ActionResult Dashboard()
{
    // एनोनिमस ऑब्जेक्ट को ViewBag में असाइन करें
    ViewBag.User = new 
    { 
        Name = "John Doe", 
        Email = "john@example.com", 
        Roles = new[] { "Admin", "User" },
        LastLogin = DateTime.Now.AddDays(-2)
    };
    
    // नेस्टेड डायनामिक ऑब्जेक्ट्स
    ViewBag.Stats = new
    {
        TotalUsers = 1250,
        ActiveUsers = 890,
        Revenue = 45000.50m
    };
    
    return View();
}
@* व्यू में *@


Users: @ViewBag.Stats.TotalUsers Active: @ViewBag.Stats.ActiveUsers Revenue: @ViewBag.Stats.Revenue:C

सावधानियां और सीमाएं

1. रिडायरेक्शन पर डेटा लॉस

public ActionResult Create()
{
    ViewBag.Message = "Created successfully";
    return RedirectToAction("Index"); // ViewBag.Message यहां खो जाएगा!
}

// समाधान: TempData उपयोग करें
TempData["Message"] = "Created successfully";
return RedirectToAction("Index");

2. टाइप सेफ्टी की कमी

// टाइपो - कंपाइल नहीं होगा, रनटाइम पर एरर
@ViewBag.Countrys  // गलत स्पेलिंग - Countries होना चाहिए

// सुरक्षित पैटर्न
@{
    var countries = ViewBag.Countries as List ?? new List();
}
@foreach (var c in countries) { ... }

3. परफॉरमेंस ओवरहेड

डायनामिक डिस्पैच में रनटाइम बाइंडिंग ओवरहेड होता है। हाई-परफॉरमेंस परिदृश्यों के लिए, स्ट्रॉन्गली-टाइप्ड व्यू मॉडल्स प्राथमिकता दें।

सर्वोत्तम अभ्यास

  • सरल, छोटे डेटा के लिए ViewBag का उपयोग करें (टाइटल, फ्लैग्स, छोटी लिस्ट्स)
  • कॉम्प्लेक्स डेटा के लिए स्ट्रॉन्गली-टाइप्ड व्यू मॉडल्स का उपयोग करें
  • रिडायरेक्ट के बाद डेटा के लिए TempData का उपयोग करें
  • कुंजी नामों के लिए कॉन्स्टेंट्स परिभाषित करें टाइपो से बचने के लिए
  • नल-चेकिंग के साथ सुरक्षित एक्सेस पैटर्न का उपयोग करें

स्ट्रॉन्गली-टाइप्ड विकल्प (अनुशंसित)

// ViewModel
public class CountryViewModel
{
    public List Countries { get; set; }
    public string PageTitle { get; set; }
    public int ItemCount { get; set; }
}

// Controller
public ViewResult Index()
{
    var model = new CountryViewModel
    {
        Countries = new List { "India", "Malaysia", "Dubai", "USA", "UK" },
        PageTitle = "Countries List",
        ItemCount = 5
    };
    return View(model);
}

// View (@model CountryViewModel)

@Model.PageTitle

    @foreach (var country in Model.Countries) {
  • @country
  • }
  1. C# ASP.NET WebAPI में CORS समस्या कैसे हल करें? C# ASP.NET WebAPI में CORS समस्या कैसे हल करें?

    क्रॉस-ओरिजिन रिसोर्स शेयरिंग (CORS) एक ऐसा तंत्र है जो ब्राउज़रों को यह बताने के लिए अतिरिक्त HTTP हेडर्स का उपयोग करता है कि एक ओरिजिन पर चल रहे वेब एप्लिकेशन को किसी अलग ओरिजिन से चुनिंदा रिसोर्सेज तक पहुंच दी जाए। एक वेब एप्लिकेशन एक क्रॉस-ओरिजिन HTTP रिक्वेस्ट निष्पादित करता है जब वह किसी ऐसे रि

  1. विंडोज 11/10 में नेट यूज़ कमांड का उपयोग कैसे करें विंडोज 11/10 में नेट यूज़ कमांड का उपयोग कैसे करें

    आप अपने लोकल एरिया नेटवर्क में साझा संसाधन, जैसे नेटवर्क प्रिंटर, मैप्ड ड्राइव, आदि से कनेक्ट करने के लिए net use कमांड का उपयोग कर सकते हैं। यदि आप इस कमांड से परिचित नहीं हैं, तो यह गाइड net use कमांड के बारे में अधिक जानने के लिए आपके लिए उपयोगी होगा, जो नेटवर्क डिवाइस को प्रबंधित करने के लिए काफ

  1. विंडोज पीसी पर ASP.NET मशीन अकाउंट को समझना और हटाना विंडोज पीसी पर ASP.NET मशीन अकाउंट को समझना और हटाना

    विंडोज पर लोकल यूजर अकाउंट एक शानदार फीचर है जब कई लोग एक ही पीसी का उपयोग करते हैं और अपनी प्राइवेसी बनाए रखना चाहते हैं। हालांकि, कई यूजर्स के साथ एक अजीब घटना हो रही है - उनके पीसी पर ASP.NET Machine नाम का एक नया अकाउंट अपने आप दिखाई दे रहा है। अगर आप इस समस्या का सामना कर रहे हैं और चिंतित हैं