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.