2

저는 umbraco를 사용합니다. 7 mvc부분보기에서 umbraco 필드를 렌더링합니다.

간단히 부분 뷰에서 움 브코 필드를 렌더링하려고합니다. 그것을하는 방법을 전혀 모른다. @CurrentPage 또는 @ Umbraco.Field 또는 RenderMacro 등 내가

@model MvcImport.Models.ImportModel 
@{ 
    var formSent = false; 
    var success = TempData["Success"]; 
    if (success != null) 
    { 
     bool.TryParse(success.ToString(), out formSent); 
    } 
} 

<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@if (formSent) 
{ 

    <p>Thanks, we'll get back to you soon!</p> 
} 
else 
{ 
    using (Html.BeginUmbracoForm<MvcImport.Controllers.ImportController>("ImportExcel", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(true) 

     <div> 

      @Html.LabelFor(x => x.FileUpload) 
      @Html.TextBoxFor(x => x.FileUpload, new { type = "file", name = "Files" }) 
      @Html.ValidationMessageFor(x => x.FileUpload) 

     </div> 
     <div> 

      @Html.LabelFor(model => model.FileType)<br /> 
      @Html.DropDownListFor(model => model.FileType, Model.FileTypes) 
      @Html.ValidationMessageFor(x => x.FileType) 

     </div> 
     <input type="submit" value="Submit" class="btn-submit" /> 
    } 
} 

는 단순히 현재 페이지 필드의 예와

<p>Thanks, we'll get back to you soon!</p> 

를 교체하려면 다음과 같은 부분보기가

작동하지 않습니다.

@currentPage.thankYouCopy 

또는

@Umbraco.Field("thankYouCopy") 

그것을 어떻게?

나는이에 의해 내 주요보기에서 일부를 호출하고 있습니다 :

@Html.Partial("Import", new MvcImport.Models.ImportModel { FileTypes = fileTypes }) 

감사

나는 모든이를 테스트하지 않았습니다

답변

3

, 그러나 이것은 당신이 올바른 길을 가야한다 .. .이와

@model MvcImport.Models.ImportModel 

:

@inherits Umbraco.Web.Mvc.UmbracoViewPage<MvcImport.Models.ImportModel> 
,536 최저 나는 당신이 대체 할, 말할 수

이것은 UmbracoHelper에 대한 액세스 권한을 제공하고 당신과 같이 속성을 액세스 할 수 있도록해야합니다

@Umbraco.Field("thankYouCopy") 
+1

yeahaaa 작품입니다. 나는 Umbraco.Web.Mvc.UmbracoViewPage 을 시도해 보았습니다. 아마 @CurrentPage 만 사용하면 전에는 저에게 효과가 없었던 것입니다. 하지만 Umbraco.Field (..)와 함께 잘 작동합니다. 감사합니다. @ c0r3yz! – nickornotto

3

우리는 여기에 혼합 몇 가지 있습니다. Umbraco Nodes에서 데이터를 가져 오는 동안 사용자 정의 모델이 있습니다.

사용자 지정 모델을 사용하여보기로 전달 중입니다. @ c0r3yz와 마찬가지로 뷰로 전달되는 모델을 변경할 수 있습니다. RenderMvcController 또는 SurfaceController이 있으면 좋은 생각 일 수 있습니다.

현재 컨트롤러에 만족하면 (무엇이든지) do @Model.MyPropertyName을 사용하여 원하는 값을 표시 할 수 있습니다. 현재 노드와 같은 umbraco 기능을 원하지 않는다면, 이것은 완벽합니다.

언급 한 모든 필드 검색 옵션은 서로 비슷합니다. 노드가하는 일은 현재 노드의 정보를 검색하는 것입니다. 커스텀 모델을 사용하고 있기 때문에 앞에서 언급 한 바와 같이 엄브 럽베이스 클라스에서 커스텀 모델을 상속받을 때까지 커스텀 모델을 사용할 수 없습니다.

  • @Umbraco.Field("myfield")은 점점 오른쪽 필드의 서식을 도와 수있는 helper method입니다. 이것은 아마도 시동기를위한 가장 쉬운 해결책 일 것입니다. 매우 강력한 기능 중 하나는 재귀 = true입니다. 자세한 내용은 documentation을 참조하십시오.
  • @CurrentPage.myField 필드의 값을 반환합니다 (역학을 사용). 이것은 쓰기 쉽지만 때로는 예기치 않은 상황에 빠질 수도 있습니다.
  • @Umbraco.Content.GetPropertyValue("myField")은 필드의 값을 반환합니다.부분적으로 사용하는 것과 똑같지 만 강력하게 형식화 된 메서드/개체를 사용하고 반환합니다. Visual Studio를 사용하는 경우 intellisense 부분을 좋아할 것입니다.
  • @Umbraco.Content.GetPropertyValue<ACustomType>("myField")ValuePropertyConverters을 사용하여 필드의 값을 반환합니다. 이전 유형을 사용하고 유형을 지정하지 않으면 propertyconverters도 사용됩니다. 그러나이 표기법을 사용하면 어떤 유형이 리턴되는지 더 작은 비트를 제어 할 수 있습니다.

다른 옵션에 대한 추가 정보를 찾을 수 있도록 문서에 대한 링크가 추가되었습니다.

+0

감사합니다. @ dampeee. 너 내가 맞을지 모르겠다. 그러나 UmbracoTemplatePage에서 사용자 지정 모델을 사용할 수없는 이유를 이해할 수 없습니까? Excel에서 데이터를 가져 와서 목록에 표시하여보기에 표시하려는 컨트롤러가 있습니다. 그러나 @model MyModel 및 @inherits UmbracoTemplatePage 지시문을 모두 사용하면 오류가 발생합니다. 두 가지를 모두 사용할 수없고 @model 만 사용할 경우 사전에 전달 된 모델의 형식이 'System.Collections.Generic.List'1입니다. [MvcImport.Models.CourseImport] '하지만이 사전에는'Umbraco.Web.Models.RenderModel '유형의 모델 항목이 필요합니다. ( – nickornotto

+0

그냥이 단계에서 각 행의 umbraco 노드를 만들고 싶지 않습니다. 페이지 또는 부분 뷰에 데이터를 표시하기 만하면됩니다. – nickornotto

+0

위의 문제는 http://stackoverflow.com/questions/25158951/umbracotemplatepage-and-strongly-typed-view-not-working-together에 설명되어 있습니다. – nickornotto