问题标签 [mvc-editor-templates]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
453 浏览

asp.net-mvc-3 - 不能对相同的 DateTime 值使用不同的 EditorTemplates?

假设在我的模型中我有public DateTime Date {get;set;}有财产。在视图中,它应该在几个文本框中表示 - 一个用于日期,另一个用于时间。

我创建了两个不同的编辑器模板

日期时间.cshtml:

和 TimeOnly.cshtml

以及视图上的 EditorFor 字段


现在,问题在于传递给控制器​​的 Date 属性的实际值带有默认时间 12:00。如果我们更改 EditorFor 字段的顺序,日期也会发生同样的情况 - 在应用 TimeOnly 模板后,日期会立即回滚到默认日期值,尽管它的时间部分保持正确。

再次在视图本身上,这些值是可以的,但是在提交时它将默认值传递给控制器​​,或者使用正确的日期和默认时间,反之亦然(这取决于首先使用的模板)

当然,我总是可以通过向模型添加另一个属性来分离日期和时间,但是有更好的解决方案吗?

0 投票
6 回答
11964 浏览

asp.net-mvc - MVC3 EditorTemplate 用于使用 RadioButtons 的可为空的布尔值

我的一个对象上有一个可以为空的布尔值的属性,我希望我的逻辑具有 true 表示 Yes,false 表示 No,null 表示 N/A。现在因为我将在许多不同的对象上拥有多个这样的属性,所以为这些属性创建一个编辑器并显示模板是最有意义的。在这一切都工作之后,我将使用 jQuery UI 应用按钮集的视觉元素,但现在,这超出了我的问题范围。我的编辑器模板看起来像这样。

我的问题是,在任何情况下我都无法让这个编辑器模板正确显示模型的当前值。因为我不是在这个范围内渲染模型的属性,而是模型本身,所以 MVC3 中的内置逻辑不会正确设置选中的属性,因为进行了检查以验证名称是否为空或 null(请参阅 MVC3源,InputExtensions.cs:line#259)。我无法通过与模型比较来动态设置选中的属性,因为浏览器会检查单选按钮是否存在选中的属性而不是它的值,所以即使我的单选按钮看起来像下面的最后一个仍然是选中的.

我不能有条件地添加 HtmlAttribute 使用类似if?truevalue:falsevalue的东西,因为真/假部分将是不同的匿名类型,我得到一个错误。

我正在努力解决这个问题,希望你们中的一个人对如何解决这个问题有建议?

0 投票
3 回答
4221 浏览

asp.net-mvc - 使用帮助器 @Html.EditorForModel() 忽略某些字段

@Html.EditorForModel()我在我所有的观点上都使用了助手。

他希望他跳过我的模型中的两个字段,但仅在此视图上,另一个他必须像往常一样继续显示这些字段。

如何仅在此视图中跳过这两个字段?

0 投票
2 回答
1108 浏览

c# - IEnumerable 的 MVC3 编辑器模板不会在 @Html.LabelFor 中生成“for”属性

我为我的ViewModel班级定制了 EditorTemplate(它会生成一个复选框列表)。

在视图中我的模型是IEnumerable<ViewModel>,但是当我调用@Html.EditorForModel()生成的标签的 HTMLfor属性时label是空的。

当我只想渲染一个复选框时,一切正常。

编辑器模板:

我的观点:

生成的 HTML 如下所示(对于一个复选框):

您可以看到“for”属性为空。我做错了什么还是这是 MVC3 默认EditorTemplate的某种错误IEnumerable<T>

0 投票
1 回答
3164 浏览

asp.net-mvc - 我可以通过 UIHint 控制参数发送 SelectList 吗?

我可以通过数据注释发送 SelectList 吗?就像是...

我不明白语法,但这似乎是可能的。如果是这样,我如何从编辑器模板访问它?

如果没有,我如何动态地将 SelectList 发送到 DropDownList 编辑器模板?我特别想避免为每个 SelectList 制作单独的模板 - 我有太多的模板。谢谢

编辑:我正在研究第二个选项(反射),因为我认为它可能比覆盖 15 音节怪物 DataAnnotationsModelMetadataProvider 更直接。

0 投票
1 回答
1803 浏览

c# - 如何更改 TemplateInfo.HtmlFieldPrefix 的列表索引?

如何更改 HtmlFieldPrefix 的索引?

我是Children[0]从 EditorFor() 得到的,我想成功,Children[@Model.Id]
或者Children[2].Children[4]从 EditorFor() 得到,我想成功Children[@"ParentModel".Id].Children[@Model.Id]

直到运行时我才会知道实际的前缀。最好有一种内置的方法来改变它?
还是只是弄乱字符串?我还是 C# 字符串函数的新手。

0 投票
1 回答
12181 浏览

asp.net-mvc - 将额外数据传递给 EditorTemplate

假设我有一个 LineItem(来自过度使用的购物车示例),我想使用 EditorTemplate 呈现它。

我完全可以使用父视图(部分或其他)中的 @Html.EditorFor(m => m.LineItems) 来渲染它,但令人困惑的是传递一些额外数据的最佳方法(比如具有数据的 SelectList来自数据库)到模板。

显然,我不应该通过添加这些无关的项目来污染 LineItem 模型(但是从视图的角度来看这是必需的。)

在诉诸 ViewBag/ViewData 技巧之前,我试图查看是否有一种强类型的方法来执行此操作。

我已经尝试创建一个“LineItem”特定的视图模型来传递数据,但它会破坏 MVC 生成的名称并向集合添加一个额外的层(因为我将视图模型的 IEnumerable<> 传递给 EditorFor( ) 调用,而不是实际 LineItem 的 IEnumerable<>)

另外,这是对 EditorTemplate 的错误使用吗?LineItem 是否需要一个下拉菜单,其中包含来自数据库表的选项对于 EditorTemplate 来说太多?

请引导我走向 MVC 必杀技。在等待答案的同时,我将尝试其他想法!

澄清一下:我考虑使用 EditorTemplate 的原因是因为它为我提供了自动收集处理。否则整个 [id] 业务变得太粘。

0 投票
2 回答
3302 浏览

asp.net-mvc - 模型绑定复选框列表问题

在我的 EditorTemplates 中,我有两个视图。一个用于我的类别(称为 _Category)

一个用于类别列表(称为_Categories)

在显示这些类别的视图中,我有一个正在使用的类别列表,如下所示:

当我查看页面时,旁边有多个带有名称的复选框,这很好。复选框的名称不是很好,但是它们看起来像这样:

....name="Categories.[1].Batman"....">

名称中有一个额外的点需要消失。有想法该怎么解决这个吗?

提前致谢

0 投票
3 回答
4517 浏览

.net - 编辑器模板不适用于 DisplayFormat

我正在尝试为 DateTime 字段创建编辑器模板,但它似乎不尊重我的 DisplayFormat 属性。

我的模型:

我在文件夹 /Views/Projects/EditorTemplates/DateTime.cshtml 中的编辑器模板

这是将所有内容联系在一起的视图:

当我以这种方式拥有它时,我会看到日期的时间部分。当我删除编辑器模板时,它工作正常,只显示日期部分。为什么当我有编辑器模板时它似乎忽略了 DisplayFormat?

0 投票
2 回答
4328 浏览

asp.net-mvc - 复杂类型列表的 EditorTemplate 返回 null,而其元素的 EditorTemplate 工作正常

我有一个视图,用户可以通过选择复选框来选择任意数量的俱乐部。俱乐部是主模型的属性,类型为 List <ClubModel>。在重构时,我从这个开始:

这很好用:模型返回一个填充的 Clubs 属性。

现在我取出 <td> 标签并将它们移动到 EditorTemplate:

这仍然有效(模板未显示)。

现在我也想将循环移动到 EditorTemplate:

我正式创建了一个名为“ListOfClubs”的 EditorTemplate:

这正确显示了带有 IsAvailable 属性复选框的俱乐部,但现在发布模型的 Clubs 属性为空!

我哪里错了?

编辑:我试图通过使用来实现 Cymen 的答案:

或者在传入这些元素的列表时指定元素模板。然而,我遇到了一个异常:System.InvalidOperationException 未被用户代码处理 Message=传递到字典中的模型项的类型为“System.Collections.Generic.List`1[InvallersManagementMVC3.ViewModels.ClubModel]”,但是这本字典需要“InvallersManagementMVC3.ViewModels.ClubModel”类型的模型项。