我正在使用通用 Razor 视图来允许编辑任何实体框架对象。这是它的精简版:
@model Object
@using (Html.BeginForm())
{
@foreach (var property in Model.VisibleProperties())
{
@Html.Label(property.Name.ToSeparatedWords())
@Html.Editor(property.Name, new { @class = "input-xlarge" })
}
}
VisibleProperties() 函数如下所示:
public static PropertyInfo[] VisibleProperties(this Object model)
{
return model.GetType().GetProperties().Where(info =>
(info.PropertyType.IsPrimitive || info.PropertyType.Name == "String") &&
info.Name != model.IdentifierPropertyName()).OrderedByDisplayAttr().ToArray();
}
(我正在重用来自https://github.com/erihexter/twitter.bootstrap.mvc/的代码)
我的示例控制器之一如下:
public ActionResult Edit(int id = 0)
{
TaskTemplate tasktemplate = db.TaskTemplates.Single(t => t.TaskTemplateID == id);
return View(tasktemplate);
}
现在的问题是:除了存在与“父”表相关的 ID 属性(例如 UserID)之外,一切正常。对于这些字段,@Html.Editor 的输出很简单:FalseFalseFalseTrueFalse。
True 似乎对应于有问题的用户 - 在这种情况下是数据库中的第 4 个用户。
为什么它不输出一个漂亮的文本框,其中包含数字 4(或任何用户 ID)?
我希望我已经清楚地解释了这一点。