我正在为编辑器编写 HTML Helper。这个想法是从具有 AutoGenerateField 属性的模型中获取属性并构建一个表,其中每一行包含一个字段的名称(也来自属性)和一个包含字段实际值的 TextBox 或 CheckBox。
我对 HTMLHelper 有疑问。由于我将整个模型发送给助手而不是一个值,因此我不能使用诸如 TextBoxFor 之类的方法,因为它们需要参数,例如
"Expression<Func<TModel, TValue>> expression".
我正在使用反射并尝试发送属性,但 VisualStudio 仍然认为这是不正确的用法。
下面是我的 HtmlHelper 的简化方法:
public static MvcHtmlString GenerateEditor<TModel>(this HtmlHelper<TModel> htmlHelper)
{
var model = htmlHelper.ViewData.Model;
var result = String.Empty;
//generating container, etc ...
foreach (var property in model.GetType().GetProperties())
{
var attr = property.GetCustomAttributes(typeof (DisplayAttribute), true).FirstOrDefault();
if (attr == null) continue;
var autoGenerate = ((DisplayAttribute)attr).AutoGenerateField;
if(autoGenerate)
{
//here I'm building the html string
//My problem is in the line below:
var r = htmlHelper.TextBoxFor(property);
}
}
return MvcHtmlString.Create(result);
}
有任何想法吗?