- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设你有一个像这样的模型:
class Foo
{
public int A {get; set;}
public int B {get; set;}
}
class SomeModel
{
public List<Foo> Foos { get; set; }
}
在 ASP.NET mvc 框架的 Razor View 中,您可以执行以下操作:
@model SomeModel
@for(int i = 0; i < Model.Foos.Count; ++i)
{
Html.EditorFor(x => x.Foos[i]);
}
Razor 引擎会很高兴地吐出包含索引的正确 html,并使用正确的索引实例调用编辑器模板。
EditorFor
方法是具有签名的静态扩展方法
public static MvcHtmlString EditorFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression
)
从签名中可以清楚地看出,它只是采用一个表达式,唯一的上下文来自 HtmlHelper 实例。
我已经完成了非常有限的Expression
树处理,但是从我所看到的来看,我看不出这个静态方法有任何方式可以知道它以某种方式神奇地获得的信息。
EditorFor
方法如何找出用于生成 html 名称的索引并获取正确的实例以传递给编辑器模板?
最佳答案
您向其传递一个表达式,而不是 x.Foos[i]
的值。然后,MVC 评估该表达式并发现您为其提供了一个带有索引的集合。如果删除整个循环并执行以下操作,您将得到相同的结果:
Html.EditorFor(x => x.Foos)
然后,MVC 将自动呈现集合中所有元素的编辑器模板并生成正确的名称。
您可以在此处阅读有关 MVC 如何处理显示/编辑器模板的更多信息:Link
编辑:要查看其实际效果,这是我随意编写的一段代码:
List<string> list = new List<string>() { "A", "B", "C" };
var tester = new ExpressionTester<List<string>>(list);
var item = tester.Foo(p => p[0]);
您还需要此类:
public class ExpressionTester<TModel>
{
private TModel _list;
public ExpressionTester(TModel list)
{
_list = list;
}
public TValue Foo<TValue>(Expression<Func<TModel, TValue>> expression)
{
var func = expression.Compile();
return func.Invoke(_list);
}
}
在Foo()中打断点,并在debug中查看参数表达式
。您将在“正文”->“参数”下找到您通过表达式传递的索引。在“主体”->“方法”下,您会看到它实际上是一个通用列表。
关于.net - Html.EditorFor(...) 如何知道循环的索引和项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14658139/
我想获取我的项目名称的值,但警报结果始终是: Value: function(value){ return access(this, function(value){ return value ===
我有一个用于模型角色的 EditorFor 模板,如下所示。我也有用于 Date 的 EditorFor,当我直接从 View 使用 EditorFor 时它工作正常,但是当我在编辑器中使用 Edit
我有一个像这样的 EditorFor HTML 助手: @Html.EditorFor(m => m.Name, belowLevel ? disabledHtmlOptions : null) -
我的页面中有第二件事: @for (int i = 0; i @Html.EditorFor(m => Model.Option[i].Date, n
我在将 css 类添加到 HTML.EditorFor() 时遇到问题。如果有人有同样的问题,我正在网上搜索,但我找不到任何东西。 你能帮帮我吗?因此,未定义类不是 css 的问题,而是简单地说,它没
我想在我的应用程序中自动聚焦于 editorfor,但我似乎做不到。我已在文本框上成功使用自动对焦,但我想使用编辑器来保持我的应用程序的外观通用。 任何对此的解决方案将不胜感激,谢谢。 我的尝试: @
我希望我的复选框在未选中时禁用 EditorsFor,在选中时启用它们。我知道我必须使用JavaScript,我在网上找到了一些代码,但似乎它们不起作用。 这是我的查看代码: @{Html.Rende
在我看来,我有 4 个 EditorFor 字段,我想将它们设置为 DatePickers @Html.EditorFor(model => model.Date1)
我一直在尝试使用此代码在我的 EditorFor 上设置最小值和最大值: From Date: @Html.EditorFor(model => model.SelectedYearBegin, ne
假设你有一个像这样的模型: class Foo { public int A {get; set;} public int B {get; set;} } class SomeMode
到目前为止,我们可以使用 Html.EditorFor() 为数据类型动态呈现适当的模板 - 例如string、int 或自定义类型,例如“地址”。 现在我想使用 EditorFor() 来呈现一个“
昨天,经过大量测试,我得到了以下结果,可以根据 ViewBag.CanEdit 的值有选择地将 readonly 属性应用于控件; @Html.EditorFor(m => m.Location, n
使用 C# 绑定(bind)到 MVC3 中的 View 模型。 难以设置文本框的初始值,尝试在不必创建模板等的情况下这样做 有什么想法或者我必须沿着创建自定义模板的道路走下去吗? 谢谢,蒂姆 最佳答
您好,我为价格定义了一个小数字段,如下所示: [Required(ErrorMessage = "Asking Price/Rent is required.")] [Display(Name = "
这是我的 View 模型: [Required(ErrorMessageResourceType=typeof(Resources.ValidationsResources), E
有没有人写过或有办法使用属性名称而不是表达式来调用 EditorFor。 EditorFor("Code") 相对于 EditorFor(_ => _.Code) 我想写一些更通用的东西。通过创建表达
我有一个实体模型,它包含消息对象的集合,这些消息对象属于 Message 类型,具有多个属性,包括内容、MessageID、from 和 to。 我已经为 Message 类型创建了一个 Editor
我有一个具有以下属性的模型: [Required] [HiddenInput(DisplayValue = false)] public override int Id { get; set;} 现在
有没有办法为 Html.EditorFor 助手定义一个全局模板? 我想改变输出的标记,例如而不是渲染 它将呈现: 这适用于当我将 Html.EditorF
嗨,我对网页设计和语言(包括 JavaScript)还很陌生。 在强类型 cshtml View 中,是否可以仅显示基于复选框的文本字段(其中文本字段和复选框都对模型强类型化?)我创建了一个示例场景:
我是一名优秀的程序员,十分优秀!