C# Orchard CMS零件放置

C# Orchard CMS零件放置,c#,html,.net,content-management-system,orchardcms,C#,Html,.net,Content Management System,Orchardcms,我一直在努力将内容项的特定部分放置在视图中。我的问题是如何为内容项定义cshtml视图/形状,以便将每个部分放置在所需的位置。考虑以下内容项目: item - Text field - Media field 以及以下 <div class="my text"> @Model.TextField1 <div class="media-item"> @Model.MediaField </div> </di

我一直在努力将内容项的特定部分放置在视图中。我的问题是如何为内容项定义
cshtml
视图/形状,以便将每个部分放置在所需的位置。考虑以下内容项目:

item
  - Text field
  - Media field
以及以下

<div class="my text">
    @Model.TextField1
    <div class="media-item">
        @Model.MediaField
    </div>
</div>
<p> Some text or stuf here or anyehere</p>

@Model.TextField1
@Model.MediaField
这里或任何地方的一些文本或stuf


我似乎找不到这样的例子。它应该是内容的基本视图,每个部分都有指定的对象,但我发现它无法实现(顺便说一句,我不想使用布局)。

您的问题没有包含很多细节来真正确定您的问题是什么,但这里有一些建议:

确保您的Placement.info文件对于您尝试使用的DisplayType是最新的,下面是我的一个示例:

<Placement>
<Place Parts_McrfProfile_Edit="Content:3"/>
<Place Parts_McrfProfile_Summary="Content:6"/>
<Place Parts_McrfProfileList_Edit="Content:3"/>
<Place Parts_McrfProfileList_Summary="Content:6"/>
<Place Parts_McfProfile_List="Content:6"/>

<Match DisplayType="Detail">
<!-- hide summary, show full content, for Detail -->
<Place Parts_McrfProfile_Summary="-"
       Parts_McrfProfileList_Summary="-"
       Parts_McfProfile_List="-"
       Parts_McrfProfile="Content:6"
       Parts_McrfProfileList="Content:6"
       />
<Place Parts_Common_Metadata="-"/>
</Match>

<Match DisplayType="Summary">
<Place Parts_Common_Metadata_Summary="-"/>

</Match>

<Match DisplayType="ListView">
   <Place Parts_Common_Metadata_Summary="-"
       Parts_McrfProfile_Summary="-"
       Parts_McrfProfileList_Summary="-"
       Parts_McrfProfile="-"
       Parts_McrfProfileList="-"
       Parts_McrfProfile_List="Content:6"/>
  </Match>
</Placement>

然后在您的显示驱动程序中,确保您正在构建正确的显示类型,以下是使用以下几种类型的示例:

    protected override DriverResult Display(
    McrfProfilePart part, string displayType, dynamic shapeHelper)
    {
        return Combined(
       ContentShape("Parts_McrfProfile",
                         () =>
                         {
                             part.ProfileDetail = _profileService.GetProfileDetail(part.ProfileId);

                             McrfProfileDetailViewModel profileDetailViewModel = new McrfProfileDetailViewModel();

                             profileDetailViewModel.ProfileDetail = part.ProfileDetail;

                             return shapeHelper.Parts_McrfProfile(ProfileDetail: profileDetailViewModel);
                          }),
        ContentShape("Parts_McrfProfile_List",
                         () =>
                         {
                             return shapeHelper.Parts_McrfProfile_List(ProfileRecord: part);
                         }),
        ContentShape("Parts_McrfProfile_Summary",
                         () =>
                         {
                             McrfProfileSummaryViewModel profileSummaryViewModel = new McrfProfileSummaryViewModel();

                             List<int> profileID = new List<int>() { part.ProfileId };

                             var summary = _profileService.GetProfileSummaryList(profileID).Where(e => e.ProfileID == part.ProfileId).First();

                             profileSummaryViewModel.JobTitle = summary.JobTitle;
                             profileSummaryViewModel.Name = summary.Name;
                             profileSummaryViewModel.ProfileImage = summary.ProfileImage;
                             profileSummaryViewModel.ProfileID = summary.ProfileID;

                             return shapeHelper.Parts_McrfProfile_Summary(ProfileRecord: profileSummaryViewModel);
                         }));

    }
protected override DriverResult显示(
McrfProfilePart,字符串显示类型,动态形状帮助)
{
合并收益(
ContentShape(“零件”\McrfProfile),
() =>
{
part.ProfileDetail=\u profileService.GetProfileDetail(part.ProfileId);
McrfProfileDetailViewModel profileDetailViewModel=新的McrfProfileDetailViewModel();
profileDetailViewModel.ProfileDetail=零件.ProfileDetail;
返回shapeHelper.Parts\u McrfProfile(ProfileDetail:profileDetailViewModel);
}),
ContentShape(“零件列表”,
() =>
{
返回shapeHelper.Parts\u McrfProfile\u列表(ProfileRecord:part);
}),
ContentShape(“零件\u McrfProfile\u摘要”,
() =>
{
McrfProfileSummaryViewModel profileSummaryViewModel=新的McrfProfileSummaryViewModel();
List profileID=new List(){part.profileID};
var summary=_profileService.GetProfileSummaryList(profileID).Where(e=>e.profileID==part.profileID).First();
profileSummaryViewModel.JobTitle=summary.JobTitle;
profileSummaryViewModel.Name=summary.Name;
profileSummaryViewModel.ProfileImage=summary.ProfileImage;
profileSummaryViewModel.ProfileID=summary.ProfileID;
返回shapeHelper.Parts\u McrfProfile\u摘要(ProfileRecord:profileSummaryViewModel);
}));
}
最后,如果您正确地完成了这些操作,并且正在从服务中获取有效数据(或者通过任何方式获取数据),您应该能够使用视图,如下所示:

@{
Mcrf.Profiles.ViewModels.McrfProfileDetailViewModel part =   Model.ProfileDetail;
Style.Include("profile-styles.css?v=1.0").AtHead();
Style.Include("bootstrap.css?v=1.0").AtHead();
}

@if (Model != null && part.ProfileDetail != null)
{
<div>
    <div >
        <div class="profileImgDiv">
            @if (Model != null && part != null)
            {
                if (part.ProfileDetail.ProfileImage == null)
                {
                    <img class="profile-img" src="~/Modules/Mcrf.Profiles/Content/Images/noProfilePictureImage.jpg" />
                }
                else
                {
                    <img class="profile-img" src="@Url.Content(part.ProfileDetail.ProfileImage)" />
                }
            }
        </div>
@{
Mcrf.Profiles.ViewModels.McrfProfileDetailViewModel part=Model.ProfileDetail;
Style.Include(“profile styles.css?v=1.0”).AtHead();
Include(“bootstrap.css?v=1.0”).AtHead();
}
@if(Model!=null&&part.ProfileDetail!=null)
{
@如果(型号!=null和部件!=null)
{
if(part.ProfileDetail.ProfileImage==null)
{
}
其他的
{
}
}
等等等等等等

我希望这有帮助


Roka

如果您有一个可用的备选方案,比如Content-MyContentType.cshtml,您可以执行以下操作:

<div class="my text">
    @Display(Model.TextFields)
    <div class="media-item">
        @Display(Model.Media)
    </div>
</div>
<p> Some text or stuf here or anyehere</p>

@显示(Model.TextFields)
@显示器(型号.媒体)
这里或任何地方的一些文本或stuf

然后您可以在placement.info中执行以下操作:

<Match ContentType="MyContentType">
    <Place Fields_Common_Text="TextFields" />
    <Place Fields_MediaLibraryPicker="Media" />
</Match>

注意


我不确定您的文本字段和/或媒体是什么类型的字段,因此您可能需要更改字段\u Common\u Text and fields\u MediaLibraryPicker以匹配您的字段类型。

我尝试使用替代项,但所有部分都在
@Model.Content.Items
中,这是一个数组。无法选择要重新设置的内容部分在一个确切的位置。但你的解决方案似乎太棒了,我不知道我能在placement.info(添加未识别的区域)中做到这一点