- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要做的最终结果是通过反射(reflect)对象及其属性来动态构建表单。
我已经创建了调用 TextBoxFor 和 CheckBoxFor 等的 HtmlHelper 方法,但现在我需要帮助弄清楚如何在将属性传递给 Html.TextBoxFor 时正确反射(reflect)该属性
这是辅助方法:
public static MvcHtmlString FormTextBox<TModel>(this HtmlHelper<TModel> helper, String id, String property_name, object model, RouteValueDictionary attributes)
{
Type model_type = model.GetType();
return helper.TextBoxFor(model_object => model_type.InvokeMember(property_name, BindingFlags.ExactBinding | BindingFlags.GetProperty, null, model, null));
}
但它在返回时中断并显示以下错误代码:
Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
基本上我想采取的是这样的:
@Html.TextBoxFor(model => model.Name)
把它变成这样:
@FormHelpers.FormTextBox("Name", model)
并让它输出相同的内容。
更新
我将重申这一点,因为我在解决问题方面取得了一些进展。
我已经从 Expression.PropertyOrField 创建了一个表达式,它恰好创建了我正在寻找的内容。但是我无法让 TextBoxFor 函数接受它。
Expression fieldExpr = Expression.PropertyOrField(Expression.Constant(model),property_name);
return helper.TextBoxFor(Expression.Lambda<Func<TModel>>(fieldExpr, null).Compile()());
有关如何正确将表达式传递给函数的任何想法吗?
最佳答案
好的,我通过使用属性名称和使用库 System.Linq.Expressions
传入的对象类型构建 lambda 表达式解决了这个问题。
ParameterExpression fieldName = Expression.Parameter(typeof(object), property_name);
Expression fieldExpr = Expression.PropertyOrField(Expression.Constant(model), property_name);
Expression<Func<TModel, object>> exp = Expression.Lambda<Func<TModel, object>>(fieldExpr, fieldName);
return helper.TextBoxFor(exp);
示例:
@{ Name myname = new Name();}
@Html.FormTextBox("first", myname)
fieldName 为左侧(首先)构建一个表达式,然后 fieldExpr 使用类名和属性名称构建表达式的主体。
exp 最终看起来像这样:
first => value(DynamicForm.Models.Name).first
关于c# - 通过反射动态调用textboxfor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7208911/
我想以 MM/dd/yy 格式在文本字段中显示日期。我将模型类描述为: public class VacancyFormViewModel { public int? ID { get; se
在我的数据库中,我存储了数据类型为 decimal 的字段。我在我的 ASP.NET 应用程序中使用完全相同的 (decimal) 数据类型。 为了显示值,这是在我的 View 中。 @Html.Te
请考虑以下示例: 查看模型 public class FooViewModel { public DateTime Date { get; set; } } 控制者 public class
我有一个 SQL Server 2012,其中我有一个包含两列 TITLE 和 MONTH 的 AWARD 表。 TITLE 是 varchar(256),不能为 NULL。 MONTH 是一个整数,
我在 razor 页面中有这段代码。 @{ var countryCode = Model.CountryCode;} @if (countryCode.Equal
好的,我这里有一个奇怪的。我知道该值已正确传递给该属性,因为它工作正常: @Html.TextBox("Foo", Model.Foo, new { @class = "bar" }) 现在如果我这样
这个问题已经有答案了: How to prevent browser from remembering text field content? [duplicate] (1 个回答) 已关闭 6 年前
我的 MVC 应用程序中有一个奇怪的问题。 当用户从下拉列表中选择一个日期时,它会清除 StartDate和 EndDate领域。 我有以下代码片段: Start date: @Model.S
我有两个助手:Html.TextBox 和 Html.TextBoxFor Html.TextBox(someId, someValue, new { @class = "text-box singl
我在 MVC 表单上有以下 TextBoxFor: @Html.TextBoxFor(m => m.SalesSubTotal, null, new { @class = "form-cont
我想使用 html 助手 (TextBoxFor) 屏蔽电话号码 这是我的代码 Model : [Required(ErrorMessageResourceType =
我正在尝试更改有关是否选中复选框的 TextBoxFor 只读属性。我读过其他帖子,但答案似乎对我不起作用。请任何人指出我在下面的代码中错过了什么。 @Html.La
我有一个要求,如 @Html.TextBoxFor 以逗号分隔格式显示货币,不接受负值和特殊字符。同时,当货币不可用时,我将此 TextBoxFor 的值更改为“不可用”。如何在 View 中使用十进
我正在尝试创建一个集中式登录表单,但使用下面的代码,输入文本左对齐,图标右对齐: @Html.TextBoxFo
我目前正在工作中处理一个网站。到目前为止一切正常,除非我将一个函数移动到一个库以便它可以重用。 该函数是一组两个单选按钮的单击事件。单击"is"按钮时,需要出现一个文本框及其标签。单击“否”按钮时,它
我有一个设置为只读的 TextBoxFor,它当前包含一个人的姓氏。我现在需要做的是添加它,以便此人的后缀(II、III、Sr.、Jr. 等)显示在他们姓氏旁边的文本框中。到目前为止,这就是我的姓氏。
我在@Html.TextBoxFor 中显示一些长文本。文本包含换行符、回车符等,但@Html.TextBoxFor 似乎不尊重这些。有什么我可能遗漏的想法吗? 最佳答案 文本框每个定义单行。 您必须
我正在改进我的元素设计,我想在我的 @html.textboxfor 中添加水印。我能够添加它,但它不适用于 IE 8。因此,我想在我的 @html.textboxfor 中添加一个图像,以便用户知道
我在 MVC View 页面中有这个控件作为 @Html.TextBoxFor(m => m.TemplateGroupName, new { tabindex = "1", placeho
我有一个禁用的输入字段显示来自模型的数据。 @Html.LabelFor(model => model.first_name, "Förnamn", new
我是一名优秀的程序员,十分优秀!