ASP.NET MVC의 부분보기에 매개 변수를 전달하는 방법은 무엇입니까?


93

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

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

다음과 같은 아동 전용 작업을 통해 액세스 할 수 있습니다.

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

}

이 부분보기를 다른보기 내에서 사용하고 싶습니다.

@Html.RenderPartial("FullName")

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


매우 밀접하게 관련 질문 : stackoverflow.com/questions/1909134/...
크리스 Moschini

답변:


77

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

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

그래서:

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

1
글쎄, 시도했지만 'System.Web.WebPages.WebPageExecutingBase.Write (System.Web.WebPages.HelperResult)'에 대한 최상의 오버로드 메서드 일치에 잘못된 인수 오류가 있습니다. 컨트롤러 메서드를 어떻게 구현해야합니까? 입력 매개 변수가 있어야합니까?
Saeed Neamati

18
그래서 이렇게 매개 변수를 전달했는데, 부분보기에서 어떻게 접근합니까?
Burjua

9
대괄호도 필요하지 않습니다. @Html.Partial()동일 @{Html.RenderPartial();}하지만 훨씬 더 예쁘다. 그들은 또한 동일한 과부하를 가지고 있습니다.
smdrager

7
객체에 어떻게 액세스합니까? Model.firstName그리고 그들과 같은 예외를 던져object doesn't have a 'firstName' property
ashes999 2013

4
@ ashes999는 ViewData를 통해 액세스 할 수 있지만 사용 용도에 맞는 모델을 생성하여 깔끔하게 정리할 수 있습니다. 한 번 사용하면 어떤 사람들은 그것을 던지는 것이라고 생각할 수 있지만 그보다 더 많이 사용하면 생각할 필요가 없습니다.
Ted

84

ViewData를 사용하려는 경우 다른 방법이 있습니다.

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

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

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

감사합니다. 귀하의 답변은 이에 대한 모델을 생성하지 않고 트릭을 수행했습니다.
alvarodms

모든 예 중에서 이것은 나를 위해 완전히 일한 유일한 것입니다. 감사합니다
BrianLegg 2015

이것은 내가 찾고 있던 것입니다. 모델은 없습니다. 감사합니다 :)
Anupam Roy

우수 답변 - 대신 Html.Partial의 MVC 4 사용 Html.RenderPartial와
그레이엄 Laight

24

뷰 모델을 만들어야합니다. 이런 식으로해야합니다 ...

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.FirstName@Model.LastName따라서.


13

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

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

아니

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

1
Partial View의 정의는 어떻게 보입니까? @model 선언이란 무엇입니까? 그 익명의 ...
엘리자베스

예 있는지 추가 할 수 있도록 { }내가 찾아 낼 때까지, 내가 시간을 낭비 기사
shaijut

4

다음은 dotnet 1.0.1 에서 나를 위해 일하고 있습니다 .

./ourView.cshtml

@Html.Partial(
  "_ourPartial.cshtml",
  new ViewDataDictionary(this.Vi‌​ewData) {
    {
      "hi", "hello" 
    } 
  }
);

./_ourPartial.cshtml

<h1>@this.ViewData["hi"]</h1>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.