[asp.net-mvc] mvc 4에서 부분 뷰에 매개 변수를 전달하는 방법

다음과 같은 링크가 있습니다.

 <a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>

그리고 이것을 클릭하면이 부분 페이지가 호출됩니다.

 @{
    switch ((string)ViewBag.Details)
    {

        case "Profile":
        {
           @Html.Partial("_Profile"); break;
        }

    }
}

부분 페이지 _Profile에는 다음이 포함됩니다.

Html.Action("Action", "Controller", model.Paramter) 

예:

@Html.Action("MemberProfile", "Member", new { id=1 })   // id is always changing

내 의심은 어떻게이 “Id”를 model.parameter 부분에 전달할 수 있다는 것입니다 .

내 컨트롤러는 다음과 같습니다

 public ActionResult MemberHome(string id)
    {
        ViewBag.Details = id;
        return View();
    }
  public ActionResult MemberProfile(int id = 0)
    {
        MemberData md = new Member().GetMemberProfile(id);
        return PartialView("_ProfilePage",md);
    }



답변

귀하의 질문을 이해하기는 어렵지만 요점을 얻는다면 기본보기에 부분적으로 렌더링하려는 일부보기 값이 있습니다.

부분 이름만으로 부분을 렌더링하는 경우 :

@Html.Partial("_SomePartial")

실제로 호출하는 것처럼 동일한 모델을 암시 적 매개 변수로 전달합니다.

@Html.Partial("_SomePartial", Model)

이제, 당신의 부분이 실제로 이것을 사용하기 위해서는, 예를 들어 다음과 같은 정의 된 모델이 필요합니다 :

@model Namespace.To.Your.Model

@Html.Action("MemberProfile", "Member", new { id = Model.Id })

또는 뷰 모델에없는 값 (ViewBag 또는 뷰 자체에서 생성 된 값)을 처리하는 경우 a를 전달할 수 있습니다 ViewDataDictionary

@Html.Partial("_SomePartial", new ViewDataDictionary { { "id", someInteger } });

그리고:

@Html.Action("MemberProfile", "Member", new { id = ViewData["id"] })

모델과 마찬가지로, Razor는 ViewData기본적으로 뷰의 부분을 암시 적으로 전달하므로 뷰에있는 경우 ViewBag.Id부분에서 동일한 것을 참조 할 수 있습니다.


답변

내가 직접 검색하는 동안 단일 값으로 찾은 가장 짧은 방법 중 하나는 단일 문자열을 전달하고 문자열을 다음과 같이 모델로 설정하는 것입니다.

부분 전화 측에서

@Html.Partial("ParitalAction", "String data to pass to partial")

그런 다음 모델을 Partial View에 바인딩하십시오.

@model string

Partial View에서이 값을 사용하면

@Model

array, int와 같은 다른 데이터 유형이나 IDictionary와 같은 복잡한 데이터 유형 또는 다른 데이터 유형을 사용할 수도 있습니다.

도움이 되길 바랍니다.


답변

다음은 객체를 ViewDataDictionary로 변환하는 확장 메서드입니다.

public static ViewDataDictionary ToViewDataDictionary(this object values)
{
    var dictionary = new ViewDataDictionary();
    foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(values))
    {
        dictionary.Add(property.Name, property.GetValue(values));
    }
    return dictionary;
}

그런 다음 뷰에서 다음과 같이 사용할 수 있습니다.

@Html.Partial("_MyPartial", new
{
    Property1 = "Value1",
    Property2 = "Value2"
}.ToViewDataDictionary())

new ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}구문 보다 훨씬 좋습니다 .

그런 다음 부분보기에서 ViewBag인덱스 속성이 아닌 동적 객체의 속성에 액세스하는 데 사용할 수 있습니다.

<p>@ViewBag.Property1</p>
<p>@ViewBag.Property2</p>


답변

Asp.Net 코어의 경우 더 잘 사용하십시오

<partial name="_MyPartialView" model="MyModel" />

예를 들어

@foreach (var item in Model)
{
   <partial name="_MyItemView" model="item" />
}


답변