programing

ASP에서 가방을 보는 방법.NET MVC 작동

magicmemo 2023. 5. 6. 14:31
반응형

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 만들기:가방 보기.이름="존";

  1. 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

반응형