ASP에서 가방을 보는 방법.NET MVC 작동
ASP는 어떻게 작동합니까?NET MVC의ViewBag
일이요? MSDN은 그것이 단지.Object
그것은 나를 흥미롭게 한다, 어떻게 "마법" 속성들이.ViewBag.Foo
그리고 마법의 끈.ViewBag["Hello"]
실제로 일을 합니까?
또한 어떻게 만들어서 ASP에 사용할 수 있습니까?NET WebForms 앱?
예를 들어주시면 정말 감사하겠습니다!
ViewBag
유형의dynamic
하지만, 내부적으로System.Dynamic.ExpandoObject()
다음과 같이 선언됩니다.
dynamic ViewBag = new System.Dynamic.ExpandoObject();
그래서 당신이 할 수 있는 것입니다.
ViewBag.Foo = "Bar";
Expander 개체 코드 샘플:
public class ExpanderObject : DynamicObject, IDynamicMetaObjectProvider
{
public Dictionary<string, object> objectDictionary;
public ExpanderObject()
{
objectDictionary = new Dictionary<string, object>();
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
object val;
if (objectDictionary.TryGetValue(binder.Name, out val))
{
result = val;
return true;
}
result = null;
return false;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
try
{
objectDictionary[binder.Name] = value;
return true;
}
catch (Exception ex)
{
return false;
}
}
}
동적 개체입니다. 즉, 컨트롤러에서 속성을 추가하고 나중에 보기에서 읽을 수 있습니다. 동적 개체 유형의 기능인 개체를 만드는 것이기 때문입니다.역학에 대한 MSDN 기사를 참조하십시오.MVC와 관련된 사용법에 대한 이 기사를 참조하십시오.
웹 양식에 이 속성을 사용하려면 다음과 같이 기본 페이지 클래스에 동적 속성을 추가합니다.
public class BasePage : Page
{
public dynamic ViewBagProperty
{
get;
set;
}
}
모든 페이지를 이 페이지에서 상속합니다.ASP에서 할 수 있어야 합니다.NET 마크업, 수행:
<%= ViewBagProperty.X %>
그러면 되겠군요.그렇지 않다면 해결할 방법이 있습니다.
그ViewBag
이다.System.Dynamic.ExpandoObject
제시한 바와 같이의 속성ViewBag
본질적으로.KeyValue
키를 사용하여 값에 액세스할 수 있는 쌍입니다.이러한 의미에서 다음과 같습니다.
ViewBag.Foo = "Bar";
ViewBag["Foo"] = "Bar";
ViewBag는 전달되는 데이터를 렌더링하기 위해 컨트롤러 작업에서 볼 데이터를 전달하는 데 사용됩니다.이제 ViewBag 또는 ViewData를 사용하여 컨트롤러 작업과 View 사이에서 데이터를 전달할 수 있습니다.가방 보기:동적 개체 유형입니다. 즉, 새 필드를 추가하여 동적으로 가방을 보고 보기에서 이러한 필드에 액세스할 수 있습니다.새 필드를 만들 때 뷰백 개체를 초기화해야 합니다.
예: 1. ViewBag 만들기:가방 보기.이름="존";
- View 액세스: @ViewBag.이름.
ViewBag는 동적 유형입니다.게다가, 당신은 할 수 없습니다.ViewBag["Foo"]
예외가 발생합니다. 'System' 유형의 식을 []로 인덱싱할 수 없습니다.역동적.'DynamicObject'입니다.
의 내부 구현ViewBag
실제로 Foo를 저장합니다.ViewData["Foo"]
(ViewDataDictionary 유형), 즉 이 두 가지를 서로 교환할 수 있습니다. ViewData["Foo"]
그리고.ViewBag.Foo
.
그리고 범위.ViewBag 및 ViewData는 컨트롤러의 Actions(액션)와 ViewData가 렌더링하는 View(보기) 간에 데이터를 전달하기 위해 구성됩니다.
ViewBag는 동적으로 값을 설정하거나 가져올 수 있으며 강력한 유형의 클래스 없이 원하는 수의 필드를 추가할 수 있는 동적 유형입니다. 이를 통해 컨트롤러에서 보기로 데이터를 전달할 수 있습니다.컨트롤러에서...
public ActionResult Index()
{
ViewBag.victor = "My name is Victor";
return View();
}
시야에
@foreach(string a in ViewBag.victor)
{
.........
}
제가 배운 것은 둘 다 동적 이름 저장 속성 iViewBag.victor를 가져야 한다는 것입니다.
public dynamic ViewBag
{
get
{
if (_viewBag == null)
{
_viewBag = new DynamicViewData(() => ViewData);
}
return _viewBag;
}
}
언급URL : https://stackoverflow.com/questions/14896013/how-viewbag-in-asp-net-mvc-works
'programing' 카테고리의 다른 글
블레이저 성능 (0) | 2023.05.11 |
---|---|
오류 메시지 '_BSMachError: (os/kern) 잘못된 기능(20)' (0) | 2023.05.06 |
PostgreSQL: 역할이 로그인할 수 없습니다. (0) | 2023.05.06 |
유닛 테스트 내부 코드가 번들 리소스를 찾을 수 없는 이유는 무엇입니까? (0) | 2023.05.06 |
ASP에 필요한 확인란을 만들려면 어떻게 해야 합니까?NET 양식? (0) | 2023.05.06 |