自定义表单样式

时间:2012-06-23 22:27:38

标签: orchardcms

果园新手。我试图设置自定义表单没有成功。我也一直在使用形状建模器。 我创建了一个New ContentType并添加了字段f1,f2,f3 ......我创建了一个CustomForm。现在我想在某些字段周围包含不同的div,如

<div class="g1">
f1
f2
</div>
<div class="g2">
f4
f6
</div>

BTW我试过这个结构但没有成功:

        dynamic content = @Model.Content;
    <div class="g1">
        if(@content.ContentTypeName.f1 || @content.ContentTypeName.f2)
        { @Dispaly(...)
        }
    </div>

可以在content.edit.cshtml视图中完成吗? 如果是这样,请提供一个例子。 感谢

另外,有没有办法在运行时反映Model.Content的属性?

3 个答案:

答案 0 :(得分:2)

我所做的是在Content_Edit替代中创建本地区域,然后使用placement.info重新排列字段

Placement.info:

<Match ContentType="MyForm">
    <Place Fields_Input_Edit-FirstField="MyFirstZone:1"/>
    <Place Fields_Input_Edit-SecondField="MySecondZone:1"/>
</Match>

Content.Edit-MyForm.cshtml:

<div class="edit-item">
    <div class="edit-item-primary">
        @if (Model.Content != null) 
        {
            <div class="edit-item-content">
                <div class="first-zone">
                    @Display(Model.MyFirstZone)
                </div>
                <div class="second-zone">
                    @Display(Model.MySecondZone)
                </div>
            </div>
        }
    </div>
    ....
</div>

答案 1 :(得分:1)

通常在Orchard中,您可以覆盖部件和字段的模板,而不是整个内容项的模板。形状跟踪可以帮助您确定可以用于每个字段的替代模板,甚至可以生成具有默认代码的文件供您修改。

此外,Model.Content(如果有的话)将是区域,而不是内容项。根据您所在的模板,您可以使用Model.ContentItem。

答案 2 :(得分:1)

最后提出了一个解决方案,尽管很难看,但它有效: 在与Content_Edit关联的备用项中:

@{
    dynamic content = Model.Content;
 }

<div class="g1">
@{
     foreach (var item in content)
     {
         if (item.Model.GetType().Name == "BooleanField")
         {
             if (f.Name == "f1" || f.Name == "f2")
             {
                 @Display(item);
             }
          }
      }
 }
</div>
<div class="g2">        
@{
     foreach (var item in content)
     {
         if (item.Model.GetType().Name == "BooleanField")
         {
             if (f.Name == "f4" || f.Name == "f6")
             {
                 @Display(item);
             }
         }
     }
 }
</div>