it-swarm.dev

ASP.NET Core에서 부분 뷰로 매개 변수 전달

ASP.NET Core 2.0 응용 프로그램에서 부분 뷰를 렌더링하고 몇 가지 매개 변수를 전달해야합니다.

@Html.Partial("Form", new { File = "file.pdf" })

부분보기에서 다음을 사용하여 액세스하려고했습니다.

@Model.File

그리고 나는 오류를 얻는다 :

RuntimeBinderException: 'object' does not contain a definition for 'File'

부분적으로 만 사용한다면 :

@Model

페이지에 다음이 인쇄되어 있습니다.

{ File = file.pdf } 

따라서 모델이 전달되고 속성 파일이 있습니다.

그래서 내가 무엇을 놓치고 있습니까?

9
Miguel Moura

형식화되지 않은 (익명 유형) 데이터를 부분보기로 전달하고 있습니다. @Model.File를 사용할 수 없습니다. 대신 값을 검색하려면 ViewData의 Eval 메서드를 사용해야합니다.

@ViewData.Eval("File")

전통적인 접근 방식은 강력한 형식의 ViewModel 클래스를 만들어 부분 뷰에 전달하는 것입니다. 그런 다음 @Model.File로 액세스 할 수 있습니다.

public class SampleViewModel
{
    public string File { get; set; }
}

@Html.Partial("Form", new SampleViewModel { File = "file.pdf" })

내부 전경,

@model SampleViewModel

<h1>@Model.File</h1>
16
Win

부분 뷰의 모델로 dynamic가 있어야합니다. 이런 식으로 익명 객체와 같은 모든 것을 전달할 수 있으며 작동합니다. 더하다:

@model dynamic

Form.cshtml 파일로.

4
Ricardo Peres

할 때 new { File = "file.pdf" }, 속성 파일이 포함 된 개체를 전달하고 있습니다. 이 유형은 object이므로 c #에서 변수에 직접 액세스 할 수 없습니다. 여기에서 찾을 수있는 것과 같은 객체에서 필드에 액세스하기위한 추악한 코드가 있습니다 : C # .NET CORE 사용자 지정 속성 값을 얻는 방법?

그러나이 경우 안전을 위해 가장 권장되는 방법은 클래스를 만들고 해당 클래스의 개체를 전달하는 것입니다.

따라서 다음 클래스를 만들면

public class MyFileInfo{
    public string File { get; set }
}

그런 다음 다음을 전달하여 객체를 만들 수 있습니다.

@Html.Partial("Form", new MyFileInfo{ File = "file.pdf" })

부분보기에서 처음에 모델 클래스를 정의하십시오.

@model MyFileInfo

그런 다음 동일한 파일에서 이제 액세스 할 수 있습니다

@Model.File
1
Neville Nazerane