programing

ViewData와 ViewBag의 차이점은 무엇입니까?

instargram 2023. 5. 27. 09:38
반응형

ViewData와 ViewBag의 차이점은 무엇입니까?

나는 그것을 보았습니다.ViewBag 3MVC 3에서.와 어떻게 다른가요?ViewData2에서?MVC 2에서?

C# 4.0 동적 기능을 사용합니다.보기 데이터와 동일한 목표를 달성하므로 강력한 유형의 보기 모델을 사용하는 경우에는 피해야 합니다(보기 데이터와 동일한 방법을 사용하지 않아야 함).

그래서 기본적으로 마법의 끈을 대체합니다.

ViewData["Foo"]

마법 속성 포함:

ViewBag.Foo

컴파일 시간 안전성이 없습니다.

저는 MVC에 이 개념을 도입한 것에 대해 계속해서 마이크로소프트를 비난합니다.

속성 이름은 대소문자를 구분합니다.

내부적으로 ViewBag 속성은 ViewData 사전에 이름/값 쌍으로 저장됩니다.

참고: 대부분의 MVC 3 릴리스 이전 버전에서 ViewBag 속성은 MVC 3 릴리스 노트의 이 스니펫에서 언급한 대로 ViewModel로 명명되었습니다.

(10-8-12) 제가 올린 이 정보의 출처를 게시하는 것이 제안되었습니다. 출처는 다음과 같습니다. http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4

MVC 2 컨트롤러는 late-bound 사전 API를 사용하여 보기 템플릿에 데이터를 전달할 수 있는 ViewData 속성을 지원합니다.MVC 3에서는 ViewBag 속성과 함께 다소 단순한 구문을 사용하여 동일한 목적을 달성할 수도 있습니다.예를 들어 ViewData["Message"]="text"를 쓰는 대신 ViewBag를 쓸 수 있습니다.메시지="text".ViewBag 속성을 사용하기 위해 강력한 유형의 클래스를 정의할 필요는 없습니다.동적 속성이므로 속성을 가져오거나 설정하면 실행 시 동적으로 해결됩니다.내부적으로 ViewBag 속성은 ViewData 사전에 이름/값 쌍으로 저장됩니다. (참고: 대부분의 릴리스 이전 MVC 3 버전에서는 ViewBag 속성이 ViewModel 속성으로 명명되었습니다.)

가방 보기 대 MVC에서 데이터 보기

http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html

ViewBag 및 ViewData 간의 유사성:

컨트롤러에서 보기로 이동할 때 데이터를 유지 관리하는 데 도움이 됩니다.컨트롤러에서 해당 보기로 데이터를 전달하는 데 사용됩니다.수명이 짧다는 것은 리디렉션이 발생할 때 값이 null이 된다는 것을 의미합니다.이는 컨트롤러와 보기 간의 통신 방법을 제공하는 것이 목표이기 때문입니다.이것은 서버 호출 내의 통신 메커니즘입니다.

ViewBag와 ViewData의 차이:

ViewData는 ViewDataDictionary 클래스에서 파생되었으며 문자열을 키로 사용하여 액세스할 수 있는 개체 사전입니다.ViewBag는 C# 4.0의 새로운 동적 기능을 활용하는 동적 속성입니다.ViewData에서는 복잡한 데이터 유형에 대해 유형 캐스팅이 필요하며 오류를 방지하기 위해 null 값을 확인합니다.ViewBag은 복잡한 데이터 유형에 대해 유형 캐스팅이 필요하지 않습니다.

가방 보기 및 데이터 보기 예제:

public ActionResult Index()
{   
    ViewBag.Name = "Arun Prakash";   
    return View();
}

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

뷰에서 호출

@ViewBag.Name    
@ViewData["Name"]

ViewData복잡한 데이터 유형에 대한 유형 주조가 필요하며 오류를 방지하기 위해 null 값을 확인합니다.

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>

모든 대답은 다음과 같습니다.ViewBag 및/는ViewData에서 데이터를 전달하는 것입니다.ControllerViews그것잘못정다니보. 둘 다 또는 View 하는 데 아닙니다.둘 다 뷰에서 레이아웃 또는 부분 뷰(또는 뷰 구성요소 등)로 데이터를 전달하는 데 매우 유용합니다. 컨트롤러 전용은 아닙니다.

기본 asp.net 샘플은 레이아웃 페이지에 다음과 같이 표시됩니다.

<title>@ViewData["Title"] - MyApp</title>

그리고 어떤 관점에서도.

ViewData["Title"] = "Details";

그래서 다음과 같은 질문을 하는 것: "사이의 차이점은 무엇입니까?ViewBag그리고.ViewData?"

눈에 은 가장눈띄차이은점는에입니다.ViewData는 강력한 유형의 사전입니다.ViewBag동적 유형입니다.

내부의 데이터는 동일합니다.

ViewData["Title"] = "MyTitle";
ViewBag.Title; // returns "MyTitle";

언제 하나 또는 다른 하나를 사용해야 합니까?

  • ViewBag유효하지 않은 C# 이름을 지원하지 않습니다.액세스할 수 없습니다.ViewData["Key With Space"]와 함께ViewBag
  • ViewBag.Something는 동적이며 컴파일 시 정확한 매개 변수를 알아야 하는 메서드(예: 확장 메서드)를 호출할 때 문제가 발생할 수 있습니다.
  • ViewBag클리너를 할 수 . " Nulls " 를 확인합니다.ViewBag.Person?.Name
  • ViewData 있습니다. 예를 들어 와 같 은 사 있 가 습 니 다 고 지 을 성 속 전 모 의 든 ▁have ▁all 니 있 ▁the 다 습 ties 와 ▁likeary ▁of 고ContainsKey,Add사용할 수 있는 등ViewData.Add("somekey", "somevalue")예외가 발생할 수 있습니다.
  • 용사를 합니다.ViewData보기에 TypeCasting이 필요한 반면ViewBag하지 마.

미묘한 차이를 아는 것은, 하나 또는 다른 하나를 사용하는 것이 훨씬 더 취향에 맞는 것입니다.

은 일적으생수있다니습할각로반▁of다▁normally니있을 생각할 수 있습니다.ViewBag.AnyKey…이라는 ViewData["AnyKey"]

둘 다 사용하지 않는 것을 추천해도 됩니까?

화면에 데이터를 "보내고" 싶은 경우 강력하게 입력된 개체(A.K.A)를 전송합니다.View Model)은 테스트하기 쉽기 때문입니다.

어떤 종류의 "모델"에 바인딩하고 임의의 "뷰백" 또는 "뷰 데이터" 항목이 있으면 자동화된 테스트가 매우 어렵습니다.

이러한 기능을 사용하는 경우에는 View Model을 사용하여 재구성할 수 있는 방법을 고려하십시오.

ViewData 및 ViewBag를 보기와 약간 다른 방식으로 사용할 수 있다는 것을 의미하는 몇 가지 미묘한 차이가 있습니다.한 가지 장점은 이 게시물 http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx 에 요약되어 있으며, 이 예제에서는 ViewData 대신 ViewBag를 사용하여 주조를 피할 수 있다는 것을 보여줍니다.

아래는 ViewData, ViewBag, TempData 및 Session에 대한 포인트 투 포인트 차이입니다.Credit/copy askforprogram.in , 여기서 언급하지 않은 코드 예제에 대한 링크를 따르십시오.

  1. MVC에서 데이터 보기

    • ViewData는 ControllerBase 클래스의 속성입니다.
    • ViewData는 사전 개체의 한 유형입니다.
    • ViewData는 키 값 사전 모음입니다.
    • View Data는 MVC 1.0 버전에 도입되었습니다.
    • View 데이터는 에서 작동합니다.Net Framework 3.5 이상.
    • 열거하는 동안 코드 형식 변환을 수행해야 합니다.
    • ViewData 개체는 현재 요청에 대한 데이터만 유지합니다.
  2. MVC에서 가방 보기

    • ViewBag는 ControllerBase 클래스의 속성입니다.
    • ViewBag는 동적 개체의 한 유형입니다.
    • ViewBag는 개체의 한 유형입니다.
    • ViewBag는 MVC 3.0 버전에 도입되었습니다.
    • ViewBag는 에서 작동합니다.넷 프레임워크 4.0 이상.
    • ViewBag는 속성을 사용하고 처리하므로 열거하는 동안 형식 변환을 수행할 필요가 없습니다.
    • ViewBag 개체는 현재 요청에 대한 데이터만 보관합니다.
  3. MVC의 온도 데이터

    • TempData는 ControllerBase 클래스의 속성입니다.
    • TempData는 사전 개체의 한 유형입니다.
    • TempData는 키 값 사전 모음입니다.
    • TempData는 MVC 1.0 버전에 도입되었습니다.
    • TempData는 에서 작동합니다.Net Framework 3.5 이상.
    • 열거하는 동안 코드 형식 변환을 수행해야 합니다.
    • TempData 개체는 현재 요청과 후속 요청 사이의 데이터에 사용됩니다.
  4. MVC에서의 세션

    • 세션은 컨트롤러(추상 클래스)의 속성입니다.
    • 세션은 HttpSessionStateBase의 한 유형입니다.
    • 세션은 키 값 사전 모음입니다.
    • 세션은 MVC 1.0 버전에 도입되었습니다.
    • TempData는 에서 작동합니다.Net Framework 1.0 이상.
    • 열거하는 동안 코드 형식 변환을 수행해야 합니다.
    • 세션 개체는 모든 요청에 대한 데이터를 유지합니다.모든 요청에 유효하며 만료되지 않습니다.

viewdata: View와 컨트롤러 사이에 데이터를 저장하는 데 사용되는 사전입니다. View 데이터 개체를 뷰의 해당 모델에 캐스트해야 데이터를 검색할 수 있습니다.

ViewBag: 뷰 데이터와 작업이 유사한 동적 속성이지만 뷰에서 사용하기 전에 해당 모델에 캐스트할 필요가 없기 때문에 더 좋습니다.

하나의 형식을 다른 형식보다 선택하는 데 기술적 이점이 없을 수도 있지만 두 구문 간에 몇 가지 중요한 차이점을 알고 있어야 합니다.한 가지 분명한 차이점은 액세스하는 키가 유효한 C# 식별자일 때만 ViewBag가 작동한다는 것입니다.예를 들어, ViewData["Key With Spaces"]에 값을 지정한 경우 코드가 컴파일되지 않으므로 ViewBag을 사용하여 해당 값에 액세스할 수 없습니다.고려해야 할 또 다른 주요 문제는 동적 값을 확장 메서드에 매개 변수로 전달할 수 없다는 것입니다.C# 컴파일러는 올바른 확장 방법을 선택하기 위해 컴파일 시 모든 매개 변수의 실제 유형을 알아야 합니다.매개 변수가 동적이면 컴파일이 실패합니다.예를 들어, 이 코드는 항상 실패합니다. @Html.텍스트 상자("이름", ViewBag).Name). 이 문제를 해결하려면 ViewData["Name"]를 사용하거나 VA를 캐스트합니다.

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

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

In View:

@ViewBag.Name 
@ViewData["Name"] 

이러한 방식으로 TEMP DATA를 사용하여 컨트롤러 사이의 정보를 다른 페이지로 전달하는 데 값을 사용할 수 있습니다.

ViewData와 ViewBag의 주요 차이점은 다음과 같습니다.

ViewData : 이 객체는 사용자가 이 객체에 할당한 내용과 상관없이 원래 유형으로 다시 캐스트를 입력해야 합니다.

ViewBag : 당신이 할당한 정확한 유형을 반환하는 것은 당신이 단순한 유형(예: int, string 등)이나 복잡한 유형을 할당한 날씨에 상관없이 충분히 현명합니다.

예: 컨트롤러 코드.

 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>

출력 화면입니다.

여기에 이미지 설명 입력

ViewData
  1. ViewData는 컨트롤러에서 보기로 데이터를 전달하는 데 사용됩니다.
  2. ViewDataDictionary 클래스에서 파생되었습니다.
  3. 현재 요청에만 사용할 수 있습니다.
  4. 복잡한 데이터 유형에 대해 유형 캐스팅을 요구하고 오류를 방지하기 위해 null 값을 확인합니다.
  5. 리디렉션이 발생하면 해당 값이 null이 됩니다.
ViewBag
  1. ViewBag는 컨트롤러에서 해당 보기로 데이터를 전달하는 데도 사용됩니다.
  2. ViewBag는 C# 4.0의 새로운 동적 기능을 활용하는 동적 속성입니다.
  3. 또한 현재 요청에 대해서만 사용할 수 있습니다.
  4. 리디렉션이 발생하면 해당 값이 null이 됩니다.
  5. 복잡한 데이터 유형에 대해 타이프 캐스팅이 필요하지 않음

여기서 ViewData와 ViewBag는 모두 컨트롤러에서 View로 데이터를 전달하는 데 사용됩니다.

데이터 보기

ViewData는 ViewDataDictonary 클래스에서 파생된 사전 개체입니다.

데이터는 하나의 요청에만 허용되며 페이지 리디렉션이 발생할 때 ViewData 값이 지워집니다.

사용하기 전에 ViewData 값을 cate로 입력해야 합니다.

예:컨트롤러 내

public ActionResult PassingDatatoViewWithViewData()
{
      ViewData["Message"] = "This message shown in view with the ViewData";
      return View();
}

뷰에서

@ViewData["Message"];

ViewData가 Key와 Value와 같은 쌍인 경우 메시지는 Key이고 역콤마 값은 Value입니다.

데이터가 단순하기 때문에 데이터가 복잡할 경우 유형 캐스팅을 사용할 수 없습니다.

public ActionResult PassingDatatoViewWithViewData()
{
      var type= new List<string>
    {
        "MVC",
        "MVP",
        "MVVC"
    };
    ViewData["types"] = type;
    return View();
}

InView 데이터는 다음과 같이 추출할 수 있습니다.

<ul>
        @foreach (var items in (List<string>)ViewData["types"])
        {
         <li>@items</li>
        }
  </ul>

가방 보기

--ViewBag는 동적 기능을 사용합니다.ViewData 주변의 ViewBag 래퍼입니다.

ViewBag에 주조 유형이 필요합니다.

ViewData와 마찬가지로 리디렉션이 발생하면 값이 null이 됩니다.

예:

public ActionResult PassingDatatoViewWithViewBag()
{
          ViewData.Message = "This message shown in view with the ViewBag";
          return View();
}

뷰에서

@ViewBag.vbMessage

--복잡한 유형의 경우 ViewBag 사용

public ActionResult PassingDatatoViewWithViewBag()
{
          var type= new List<string>
        {
            "MVC",
            "MVP",
            "MVVC"
        };
        ViewBag.types = type;
        return View();
 }

InView 데이터는 다음과 같이 추출할 수 있습니다.

<ul>
       @foreach (var items in ViewBag.types)
       {
         <li>@items</li>
       }
</ul>

주요 차이점은 ViewBag은 유형 캐스팅이 필요하지 않지만 ViewData는 유형 캐스팅이 필요하다는 것입니다.

가방 보기

  1. Type Object를 반환합니다.
  2. 은 그은입니다.dynamicControllerBase학생들
  3. ViewBag 40합니다.NET Framework 4.0 이상에서만 작동합니다.
  4. 「TypeCasting」 이후 전 .ViewBag은 재은입니다.dynamic본질적으로
  5. ViewBag도 Dynamic Type Object입니다.dynamic.
  6. 그것은 보다 조금 빠릅니다.ViewData.

데이터 보기

  1. 키-값 사전 쌍 컬렉션을 반환합니다.
  2. ViewData이며 사전객속의다니입의 입니다.ControllerBase학생들
  3. ViewData보다 .ViewBag.
  4. 사전 쌍 컬렉션이므로 열거하는 동안 형식 변환 코드가 필요합니다.
  5. ViewData객체를 반환합니다(키-값 쌍의 유형과 값은 객체 유형이므로 사용 전에 캐스트해야 합니다).

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

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

뷰에서 호출

@ViewBag.Name    
@ViewData["Name"]

ViewBag 및 ViewData는 ASP.Net MVC에서 컨트롤러에서 보기로 정보를 전달하는 데 사용되는 두 가지 수단입니다.두 메커니즘을 모두 사용하는 목적은 컨트롤러와 View 간의 통신을 제공하는 것입니다.둘 다 수명이 짧아서 리디렉션이 발생하면 둘 다 null이 되고, 페이지가 원본 페이지(ViewBag 또는 ViewData 값을 설정함)에서 대상 페이지로 리디렉션되면 ViewBag 및 ViewData 모두 null이 됩니다.

이러한 유사점이 있음에도 불구하고(ViewBag 및 ViewData) 두 가지 모두 구현에 대해 이야기하면 서로 다릅니다.차이점은 다음과 같습니다.

1.) 두 가지 구현을 모두 현명하게 분석하면 ViewData는 ViewDataDictionary에서 파생된 사전 데이터 구조 - 객체 사전이며 이러한 값의 Key로 문자열을 사용하여 액세스할 수 있는 반면 ViewBag는 C#4.0에 도입된 동적 기능을 사용하며 동적 속성입니다.

2.) ViewData의 값에 액세스하는 동안 ViewData 사전에 Objects로 저장된 값(데이터 유형)을 입력해야 하지만 ViewBag의 경우 이 값에 액세스하는 경우에는 그럴 필요가 없습니다.

3.) ViewBag에서 다음과 같이 값을 설정할 수 있습니다.

      ViewBag.Name = "Value"; 

다음과 같이 액세스할 수 있습니다.

          @ViewBag.Name

ViewData의 경우 다음과 같이 값을 설정하고 액세스할 수 있습니다.View Data를 다음과 같이 설정합니다.

ViewData["Name"] = "Value";

그리고 이런 가치에 접근하는 것.

 @ViewData["Name"] 

자세한 내용은 여기를 클릭하십시오.

언급URL : https://stackoverflow.com/questions/4705426/whats-the-difference-between-viewdata-and-viewbag

반응형