标签: display-templates

ASP.net MVC - 显示集合的模板

我在MVC中有以下模型:

public class ParentModel
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }

    public IEnumerable<ChildModel> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我想显示父模型的所有子项时,我可以这样做:

@Html.DisplayFor(m => m.Children)
Run Code Online (Sandbox Code Playgroud)

然后我可以创建一个ChildModel.cshtml显示模板,DisplayFor将自动遍历列表.

如果我想为IEnumerable创建自定义模板怎么办?

@model IEnumerable<ChildModel>

<table>
    <tr>
        <th>Property 1</th>
        <th>Property 2</th>
    </tr>
    ...
</table>
Run Code Online (Sandbox Code Playgroud)

如何创建具有模型类型的显示模板,IEnumerable<ChildModel>然后在@Html.DisplayFor(m => m.Children)没有抱怨模型类型错误的情况下调用?

asp.net-mvc display-templates asp.net-mvc-3

42
推荐指数
3
解决办法
2万
查看次数

在编辑器模板中,使用相同的模型调用另一个编辑器模板

我有一个编辑器模板,在该编辑器模板中,我想调用具有相同模型的另一个编辑器模板(即嵌套),但似乎没有显示.
即.\ EditorTemplates\Template1.cshtml

@model foo

// insert code here to edit the default fields.

// display extra fields via another editor template.
@Html.EditorForModel("Template2")   // or @Html.EditorFor(m => m, "Template2")
Run Code Online (Sandbox Code Playgroud)

和\ EditorTemplates\Template2.cshtml

@model foo

@Html.TextBoxFor(m => m.Name)
Run Code Online (Sandbox Code Playgroud)

我相信有人会质疑为什么?好吧,只有满足条件时才会显示嵌套模板(即@if(@ Model.IsConditionMet){....}),但为了简单起见,我将其从原型中删除了.

asp.net-mvc nested editortemplates razor display-templates

28
推荐指数
1
解决办法
4193
查看次数

对集合中的每个项目使用DisplayTemplate(带DisplayFor)

我为一个Comment类创建了一个DisplayTemplate ,并将其放在里面Comment/DisplayTemplates/Comment.cshtml.

Comment.cshtml 输入正确:

@model Comment
Run Code Online (Sandbox Code Playgroud)

然后,我有一个局部视图,需要一个IEnumerable<Comment>模型.在那里,我遍历集合,并希望使用DisplayTemplate为Comment类.该观点,其完整性:

@model IEnumerable<Comment>

@foreach (var comment in Model.Where(c => c.Parent == null)) { 
    @Html.DisplayFor(model => comment)
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误Html.DisplayFor:

传递到字典中的模型项的类型为"System.Int32",但此字典需要"System.String"类型的模型项.

如何为foreach循环中的每个项调用DisplayTemplate ?

asp.net-mvc razor display-templates asp.net-mvc-3

22
推荐指数
2
解决办法
2万
查看次数

如何覆盖DisplayFor boolean?

如何创建显示模板,以便我可以显示bool为是或否不是复选框?使用mvc3

<%: Html.DisplayFor(model => model.SomeBoolean)%>
Run Code Online (Sandbox Code Playgroud)

checkbox boolean display-templates asp.net-mvc-3

21
推荐指数
4
解决办法
1万
查看次数

MVC 3多个DisplayFor-Templates

我正在尝试为购物篮商品列表制作自定义模板.我需要一些不同的模板,因为我有不同的方式来显示项目,具体取决于它是在网页上还是在邮件中.现在我的问题是,当我使用默认名称时,它可以完美地运行.

@Html.DisplayFor(b => b.Items)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试添加模板名称时,我得到了一个预测,我的模板需要是一个列表类型IEnumerable而不是BasketItem.

@Html.DisplayFor(i => basket.Items, "CustomerItemBaseList")
Run Code Online (Sandbox Code Playgroud)

任何想法,我的错误,或为什么不可能被赞赏.谢谢.

asp.net-mvc display-templates

14
推荐指数
1
解决办法
5011
查看次数

使用嵌套显示模板时如何防止Razor为输入添加前缀?

当我使用嵌套显示模板并通过HTML帮助器添加输入元素时,Razor引擎会在字段名称中添加前缀.

我知道这样做是为了保证页面级别的输入名称唯一性(并在后期重建整个模型).

但是我有许多小型表单执行临时操作,我既不需要名称唯一性也不需要重建整个模型的能力.

我只需要单个属性值,并且当我提交其中一个表单时让Razor更改输入项名称会破坏模型绑定器,因为所有名称都不同.

此示例包含简化的嵌套模型

public class Student
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public List<Course> Courses { get; set; }
}

public class Course
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public List<Grade> Grades { get; set; }
}

public class Grade
{
    public Guid Id { get; set; }
    public DateTime Date { get; …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc model razor display-templates

11
推荐指数
1
解决办法
4198
查看次数

ASP.NET MVC 4仅为字符串定义显示模板

我想只为字符串属性创建一个显示模板,并为所有其他属性使用default.

我试图在Views/Shared/DisplayTemplates中创建一个string.cshtml,其中包含以下内容:

@model string
@Html.TextBoxFor(m => m, new { @readonly = "readonly" })
Run Code Online (Sandbox Code Playgroud)

我现在有一个问题,当我尝试打开任何使用DisplayFor(m => m.property)的视图时,它显示如下错误:传递到字典中的模型项是'System.DateTime'类型,但是这个字典需要一个'System.String'类型的模型项.或:传递到字典中的模型项的类型为"System.Int64",但此字典需要"System.String"类型的模型项.

我知道我可以通过为每种使用的类型添加显示模板来解决这个问题,但我想对于没有定义自定义模板的所有类型,我也可以使用"默认"模板吗?

更新 Darin的回答后,我检查了Brad的教程并将模板更改为:

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @readonly = "readonly" })
Run Code Online (Sandbox Code Playgroud)

这基于"默认"模板,适用于所有类型.

razor display-templates asp.net-mvc-4

9
推荐指数
1
解决办法
9783
查看次数

Sharepoint:如何在交叉发布方案中的显示模板上显示AppendOnlyHistory

我试图实现的首要要求是显示注释(在列表中逐项进行).

我在创作方面添加了该功能,方法是在列表上启用版本控制,并添加一个文本字段,其中选项"将更改添加到现有文本"设置为true.这确实允许我对项目进行评论并按时间顺序显示它们,但仅限于创作方.问题是UI部分将在另一个网站集上完成,我找不到一种简单的方法来获取所有评论.

到目前为止,我发现的每一种资源都指向了

 <SharePoint:AppendOnlyHistory runat="server" FieldName="YourCommentsFieldName" ControlMode="Display"/>
Run Code Online (Sandbox Code Playgroud)

问题是,我不能(不知道如何)在显示模板中使用它.到目前为止,我通过REST API获取所有数据

        var siteUrl=_spPageContextInfo.webAbsoluteUrl.replace("publishing","authoring");
        $.ajax({
            url: siteUrl + "/_api/web/lists/getbytitle('" + listname + "')/items(" + id + ")",
            type: 'GET',
            async:false,
            headers: {"accept": "application/json;odata=verbose",},
            dataType: 'JSON',
            success: function(json) {
               console.log(json);
               //var obj = $.parseJSON(JSON.stringify(json.d.results));
               //alert(obj);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert("error :"+XMLHttpRequest.responseText);
            }
        });
Run Code Online (Sandbox Code Playgroud)

这给我的是最新的评论.我需要一个简单的方法来获取整个线程.

display-templates sharepoint-2013

9
推荐指数
1
解决办法
751
查看次数

使用UIHint的ASP.NET MVC 3自定义显示模板 - 是否需要循环?

如果我有这样的ViewModel:

public class MyViewModel
{
   [UIHint("SomeTemplate")]
   public ICollection<SomeViewModel> Submodel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

一个带有一行HTML 的强类型视图,如下所示:

@Html.DisplayFor(model => model.Submodel)
Run Code Online (Sandbox Code Playgroud)

以及带有如下签名的显示模板:

@model MvcApplication1.Models.SomeViewModel
Run Code Online (Sandbox Code Playgroud)

我得到一个错误说"模型项是类型的,List<SomeViewModel>但这个字典需要一个类型的模型SomeViewModel.".

这是有道理的,但我希望MVC的内置模板智能会启动,看到它是一个IEnumerable东西,并努力调用我的模板N次,就像Html.DisplayFor没有提示通常做的那样.

所以它看起来像[UIHint]覆盖了那个功能?

显然,我可以指向另一个接受集合的模板,并调用Html.DisplayForModel(),基本上模拟MVC智能.但我希望避免这种情况.老实说,我宁愿做一个foreach循环而不是那个1行"包装"模板.

有更好的想法吗?

这就像我想说的那样:"嘿MVC,为这些家伙中的每一个人渲染一个模板.但是不是使用name-convention来找到模板,这里有一个提示".

asp.net-mvc data-annotations razor display-templates asp.net-mvc-3

8
推荐指数
1
解决办法
7533
查看次数

Freemarker不分配staticUtil

我在liferay 6.2上工作了应用程序显示模板,我使用freemarker帮助分页liferay的动态数据列表.当我升级到liferay 7时,这是一个问题.Liferay 7使用代码<#assign records = ddlDisplayTemplateHelper.getRecords(reserved_record_set_id)>获取记录.

旧代码:

<#assign DDLRecordLocalService = serviceLocator.findService("com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService")> <#assign records = DDLRecordLocalService.getRecords(reserved_record_set_id)> <#assign totalRecord = DDLRecordLocalService.getRecordsCount(reserved_record_set_id, 0) >

它不起作用.

所以我尝试<#assign serviceLocator = staticUtil["com.liferay.portal.template.ServiceLocator"]>staticUtil得到一个错误.

以下评估为null或缺失:==> staticUtil [在模板"20115#20159#21387"第9行,第27列]提示:如果已知失败的表达式合法地引用有时为null或缺失的内容

在portal-ext.properties中我添加了:

freemarker.engine.restricted.classes=
freemarker.engine.restricted.packages=
freemarker.engine.restricted.variables= 
Run Code Online (Sandbox Code Playgroud)

freemarker liferay display-templates liferay-7

7
推荐指数
2
解决办法
4527
查看次数