asp.net-mvc - ASP.NET MVC에서 부분 뷰에 매개 변수를 전달하는 방법은 무엇입니까?




model-view-controller asp.net-mvc-3 controller partial-views (6)

ViewData를 사용하려면 다음과 같이하십시오.

@Html.Partial("~/PathToYourView.cshtml", null, new ViewDataDictionary { { "VariableName", "some value" } })

그리고 전달 된 값을 검색하려면 :

@{
    string valuePassedIn = this.ViewData.ContainsKey("VariableName") ? this.ViewData["VariableName"].ToString() : string.Empty;
}

이 부분보기가 있다고 가정합니다.

Your name is <strong>@firstName @lastName</strong>

이는 다음과 같은 아동 전용 조치를 통해 액세스 할 수 있습니다.

[ChildActionOnly]
public ActionResult FullName(string firstName, string lastName)
{

}

그리고이 부분 뷰를 다른 뷰 내부에서 다음과 같이 사용하고 싶습니다.

@Html.RenderPartial("FullName")

즉, firstName ans lastName을 뷰에서 부분 뷰로 전달할 수 있어야합니다. 어떻게해야합니까?


다음과 같이 Html.RenderPartial 주위에 {}을 추가해야합니다.

@{Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});}

아니

@Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});

이 오버로드를 사용하십시오 ( MSDN에서 RenderPartialExtensions.RenderPartial ).

public static void RenderPartial(
    this HtmlHelper htmlHelper,
    string partialViewName,
    Object model
)

그래서:

@{Html.RenderPartial(
    "FullName",
    new { firstName = model.FirstName, lastName = model.LastName});
}

뷰 모델을 만들어야합니다. 이것처럼 뭔가해야 해 ...

public class FullNameViewModel
{
     public string FirstName { get; set; }
     public string LastName { get; set; }

     public FullNameViewModel() { } 

     public FullNameViewModel(string firstName, string lastName)
     {
          this.FirstName = firstName;
          this.LastName = lastName;
     }

}

그런 다음 액션 결과에서 모델을 전달합니다.

return View("FullName", new FullNameViewModel("John", "Doe"));

@Model.LastName 따라 @Model.FirstName@Model.LastName 에 액세스 할 수 있습니다.


다만:

@Html.Partial("PartialName", Model);

응답에 직접 쓸 수는 있지만 테스트 할 수는 없습니다. 지연 실행이있는 ActionResult를 반환하는 것이 좋습니다. 다음은 재사용 가능한 StreamResult입니다.

public class StreamResult : ViewResult
{
    public Stream Stream { get; set; }
    public string ContentType { get; set; }
    public string ETag { get; set; }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.ContentType = ContentType;
        if (ETag != null) context.HttpContext.Response.AddHeader("ETag", ETag);
        const int size = 4096;
        byte[] bytes = new byte[size];
        int numBytes;
        while ((numBytes = Stream.Read(bytes, 0, size)) > 0)
            context.HttpContext.Response.OutputStream.Write(bytes, 0, numBytes);
    }
}




asp.net-mvc model-view-controller asp.net-mvc-3 controller partial-views