programing

Razor보기 엔진-부분보기를 추가하는 방법

nasanasas 2020. 9. 19. 11:24
반응형

Razor보기 엔진-부분보기를 추가하는 방법


가능하다면 새로운 면도기 뷰 엔진을 사용하여 부분을 렌더링하는 가장 좋은 방법이 무엇인지 궁금합니다. 나는 이것이 시간까지 완전히 끝나지 않은 것임을 이해합니다.

지금은 RenderPage를 사용하여 사용자 컨트롤을 렌더링하고 있습니다.

@RenderPage("~/Views/Shared/LocaleUserControl.cshtml",ViewData.Model)

RenderPage를 호출하는 페이지는 TitleContent, HeadContent 및 Maincontent의 세 섹션이 정의 된 레이아웃 (마스터) 페이지를 사용합니다. 이 페이지에서 내 로케일 컨트롤을 렌더링하려고하면 이러한 섹션도 필요한 것으로 보입니다. 호출 페이지에서만 필요하며 존재해야합니다. 부분보기에 섹션을 포함하는지 여부에 관계없이 다음 메시지가 표시됩니다 (분명히 이러한 섹션을 포함하고 싶지는 않지만 흥미로운 디버깅 포인트처럼 보였습니다 ...).

다음 섹션이 정의되었지만 레이아웃 페이지 '~ / Views / Shared / LocaleUserControl.cshtml'에 렌더링되지 않았습니다. TitleContent; HeadContent; 주요 내용

내 부분보기는 다음과 같습니다 (다음 링크에서 수정 됨 ).

@inherits System.Web.Mvc.WebViewPage<LocaleBaseModel>
@using System.Web.UI;

<p>
     @Html.LabelFor(model => Model.CountryName)
    <br />
    @Html.DropDownListFor(model => Model.CountryName,null, string.Empty, new { @class = "text", accesskey="u"})
</p>
<p>
     @Html.LabelFor(model => Model.StateProvince)
    <br />
     @Html.DropDownListFor(model => Model.StateProvince, null, string.Empty, new { @class = "text", accesskey="t" })
</p>


<script type="text/javascript">
    $(function () {
        var countries = $("#CountryName");
        var statesprovinces = $("#StateProvince");
        countries.change(function () {
            statesprovinces.find('option').remove();
            var url = '@Url.Action("GetStatesProvinces", "Base")';
            $.getJSON(url, { countryId: countries.val() }, function (data) {
                $(data).each(function () {
                    $("<option value=" + this.ID + ">" + this.Name + "</option>").appendTo(statesprovinces);
                });
            });
        });
    });
</script>

부분은 편집기 템플릿과 매우 유사하므로 다음과 같이 포함 할 수 있습니다 (물론 부분이 ~/views/controllername/EditorTemplates하위 폴더에 있다고 가정 ).

@Html.EditorFor(model => model.SomePropertyOfTypeLocaleBaseModel)

또는 이것이 사실이 아니라면 간단히 :

@Html.Partial("nameOfPartial", Model)

코드를 복제하고 싶지 않고 나처럼 통계를 표시하고 싶다면 뷰 모델에서 다음과 같이 데이터를 가져올 모델을 전달할 수 있습니다.

public class GameViewModel
{
    public virtual Ship Ship { get; set; }
    public virtual GamePlayer GamePlayer { get; set; }     
}

그런 다음 컨트롤러에서 각 모델에 대한 쿼리를 실행하고 뷰 모델에 전달하고 반환합니다. 예 :

GameViewModel PlayerStats = new GameViewModel();

GamePlayer currentPlayer = (from c in db.GamePlayer [more queries]).FirstOrDefault();

[결과 확인 코드]

//pass current player into custom view model
PlayerStats.GamePlayer = currentPlayer;

Like I said, you should only really do this if you want to display stats from the relevant tables, and there's no other part of the CRUD process happening, for security reasons other people have mentioned above.

참고URL : https://stackoverflow.com/questions/3380945/razor-view-engine-how-can-i-add-partial-views

반응형