如何在HtmlHelper中调用`EditorExtensions.EditorFor`?
我在CreateView中使用不同的模型,所有模型都inheritance自BaseModel。 调用正确的EditorFor我创建了一个获取Model和实际属性的HtmlHelper。 但我不知道如何调用它。
BaseModel:
public abstract class BaseModel { protected IEnumerable PropertyInfoCache { get; set; } protected IEnumerable EnumeratedPropertyCache { get; set; } protected BaseModel() { PropertyInfoCache = this.GetType().GetProperties(); EnumeratedPropertyCache = PropertyInfoCache.Select(p=> new EnumeratedProperty(p.Name,p.GetType())); } public IEnumerable EnumerateProperties() { return EnumeratedPropertyCache; } public object GetPropertyValue(string PropertyName) { var property = PropertyInfoCache.SingleOrDefault(i=>i.Name==PropertyName); if(property!=null) return property.GetValue(this,null); return null; } } public class EnumeratedProperty { public string Name { get; private set; } public Type Type { get; private set; } public EnumeratedProperty(string PropertyName, Type PropertyType) { this.Name = PropertyName; this.Type = PropertyType; } }
在我看来:
@foreach (var property in Model.EnumerateProperties()) { @Html.EditorForProperty(Model,property); }
的HtmlHelper:
public static class ExtensionMethods { public static MvcHtmlString EditorForProperty(this HtmlHelper html, BaseModel Model, EnumeratedProperty property) { // creates an error: The type arguments for method 'EditorFor' cannot be inferred from the usage. Try specifying the type arguments explicitly. return System.Web.Mvc.Html.EditorExtensions.EditorFor(html, Model => Model.GetPropertyValue(property.Name) ); } }
EditorFor识别对象的类型,所以你想要做的是从EnumeratedProperty类中的值中提取类型,而不是直接传递类,并从中传递值。
- 将数组作为JSON发布到MVC控制器
- 如何在异步任务中使VS中断exception,而不会破坏所有exception?
- MVC代码优先:自己的模型和SimpleMembership用户之间的一对多关系
- Asp.Net MVC3:在ValidationContext中设置自定义IServiceProvider,以便validation器可以解析服务
- 在Visual Studio中更改SQL Server数据库的最大大小以在Azure中上载
- 在开发多租户asp.net MVC应用程序时要记住什么?
- 如何在Asp.Net Core中设置日期绑定的文化?
- 我应该为每个Web请求使用静态缓存的ResourceManager还是新实例? 有关系吗?
- ASP.NET MVC 4 – 401访问被拒绝