标签: view-templates

在ASP.NET MVC中使用自定义编辑器模板和IEnumerable模型的正确,惯用方法

这个问题是为什么我的DisplayFor没有遍历我的IEnumerable <DateTime>的后续行动


快速刷新.

什么时候:

  • 该模型具有类型的属性 IEnumerable<T>
  • 您将此属性传递给Html.EditorFor()使用仅接受lambda表达式的重载
  • T在Views/Shared/EditorTemplates下有一个类型的编辑器模板

然后MVC引擎将自动为可枚举序列中的每个项调用编辑器模板,生成结果列表.

例如,当存在Order具有属性的模型类时Lines:

public class Order
{
    public IEnumerable<OrderLine> Lines { get; set; }
}

public class OrderLine
{
    public string Prop1 { get; set; }
    public int Prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且有一个视图Views/Shared/EditorTemplates/OrderLine.cshtml:

@model TestEditorFor.Models.OrderLine

@Html.EditorFor(m => m.Prop1)
@Html.EditorFor(m => m.Prop2)
Run Code Online (Sandbox Code Playgroud)

然后,当您@Html.EditorFor(m => m.Lines)从顶级视图调用时,您将获得一个页面,其中包含每个订单行的文本框,而不仅仅是一个.


但是,正如您在链接问题中看到的那样,这仅在您使用特定的重载时才有效EditorFor.如果您提供模板名称(为了使用未在OrderLine类之后命名的模板),则不会发生自动序列处理,而是会发生运行时错误.

此时,您必须将自定义模板的模型声明为IEnumebrable<OrderLine>并以某种方式手动迭代其项目以输出所有这些项目,例如

@foreach (var line in Model.Lines) {
    @Html.EditorFor(m …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc ienumerable view-templates razor-3

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

在服务器上渲染部分视图或在客户端上发送json数据和渲染模板

我想知道在Web应用程序中渲染部分视图的好方法(或推荐方法).

我有一个要求,我需要使用AJAX将数据加载到已经呈现的页面中,有点像页面末尾的"加载更多..."链接,它从服务器获取更多信息并将其呈现到底部这页纸.

我正在玩AJAX响应的两个选项是

  1. 返回数据的JSON表示,并使用客户端模板库(例如jQuery模板)或只是简单的javascript将JSON转换为HTML并附加到页面底部
  2. 渲染服务器上的局部视图(在我的例子中使用grails' render template:'tmplt_name')并通过网络发送它,然后将结果附加到页面底部

还有其他方法吗?如果没有,鉴于上述选项在维护,性能和可测试性方面会更好?我确定的一件事是,JSON路由(在大多数情况下)比使用线路发送html消耗更少的带宽.

html javascript grails view-templates

6
推荐指数
1
解决办法
1445
查看次数

什么时候使用<% - %>而不是<%%>

我注意到在某些rails视图行中,使用了以下内容:

<% # Code... -%> 
Run Code Online (Sandbox Code Playgroud)

代替:

<% # Code... %>
Run Code Online (Sandbox Code Playgroud)

有什么不同?

ruby-on-rails view-templates

4
推荐指数
2
解决办法
428
查看次数

UIHint不使用EditorTemplate

我有这样的模型:

public class MyModel {
    [ScaffoldColumn(false)]
    public int CharityId { get; set; }

    [UIHint("Charities")]
    public SelectList Charities { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个名为Charities.cshtml的EditorTemplate:

@model MyModel

@Html.DropDownListFor(model => model.CharityId, Model.Charities)
Run Code Online (Sandbox Code Playgroud)

然后在我的页面中:

@model MyModel

@Html.EditorForModel()
Run Code Online (Sandbox Code Playgroud)

但是,无论如何,它都不会呈现慈善机构模板.我一直在抨击我的大脑,它应该工作......但事实并非如此.

有任何想法吗?

编辑:

问题是,默认的对象模板将不会呈现比本身(所谓的小角度俯冲)等复杂的对象,即使是有UIHint.我的印象是UIHint会让它渲染模板,但我显然是错的.

修复是不要试图让模型自己渲染.那很难过.

c# asp.net-mvc asp.net-mvc-3 view-templates

2
推荐指数
1
解决办法
5213
查看次数

TYPO3 将 Fluid 变量值传递给 Javascript

在流体模板中,我有一个流体变量,我想在我的 JavaScript 代码中使用它的值。

我在流体模板中使用 JavaScript。

我的代码:

<!-- value I would use further in my javascript -->
<h1 id="product-model">{product.model}</h1>

<!-- Javascript code (in the same file) -->
<script>
   <![CDATA[
     function printProductWindow() {
       document.title = document.getElementById("product");
       window.print(); 
     } 
   ]]>
</script>
Run Code Online (Sandbox Code Playgroud)

提前致谢!丹尼斯

javascript typo3 fluid view-templates

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