Asp.net mvc MVC过滤器编辑器

Asp.net mvc MVC过滤器编辑器,asp.net-mvc,razor,Asp.net Mvc,Razor,我想在我的cshtml列表中有一个过滤器行,在那里我可以使用该列的编辑器。 我想要字符串字段的文本编辑器,带外键约束的字段的下拉编辑器,日期字段的日期编辑器 下面是我的自动生成模型 public partial class MEMBER { public int ID { get; set; } [Display(Name="Title")] public string TITLE { get; set; } public string FIRST_NAME {

我想在我的cshtml列表中有一个过滤器行,在那里我可以使用该列的编辑器。 我想要字符串字段的文本编辑器,带外键约束的字段的下拉编辑器,日期字段的日期编辑器

下面是我的自动生成模型

public partial class MEMBER
{
    public int ID { get; set; }
    [Display(Name="Title")]
    public string TITLE { get; set; }
    public string FIRST_NAME { get; set; }
    public string MIDDLE_NAME { get; set; }
    public string LAST_NAME { get; set; }
    public string SUFFIX { get; set; }
    public string EMAIL { get; set; }
    public string PHONE { get; set; }
    public string EXT { get; set; }
    public string FAX { get; set; }
    public string STATE { get; set; }
    public string PARTY { get; set; }
    public string DISTRICT { get; set; }
    public string ACTIVE { get; set; }
    public Nullable<System.DateTime> ACTIVATED_DT { get; set; }
    public string ACTIVATED_ID { get; set; }
    public Nullable<System.DateTime> DEACTIVATED_DT { get; set; }
    public string DEACTIVATED_ID { get; set; }
    public string ROOM { get; set; }
    public string MOST_ACTIVE_ISSUES { get; set; }
    public string NOAA_NEXT_GEN { get; set; }
    public Nullable<short> REELECTION { get; set; }
    public string COMMENTS { get; set; }
    public string MEMBER_DISTINCTION { get; set; }
    public string FLAG_TYPE { get; set; }
    public string CURR_STATUS { get; set; }

    public virtual US_STATE US_STATE { get; set; }
}
在我的定制助手中,我会有这样的东西

    public static MvcHtmlString FilterEditorFor<TModel, TValue>(this HtmlHelper<IEnumerable<TModel>> html, Expression<Func<TModel, TValue>> expression
    )
    {
        MvcHtmlString result = new MvcHtmlString("");
        // return MvcHtmlString.Create(TemplateHelpers.TemplateHelper(html, html.ViewData.ModelMetadata, String.Empty, null /* templateName */, DataBoundControlMode.Edit, null /* additionalViewData */));
        ModelMetadata mm = html.ViewData.ModelMetadata;
        string s = "";
        switch (mm.DataTypeName)
        {
            case "DateTime":
                s = "<input id='{0}' class='xgFilterDate' type='text'>";
                break;
            case "bool":
                s = "<input id='{0}' class='xgFilterDate' type='checkbox'>";
                break;
            case "string":
                s = "<input id='{0}' class='xgFilterText' type='text'>";
                break;
            default:
                break;
        }
        s = string.Format(s, mm.ModelType.Name + "_" + mm.ShortDisplayName);
        return new MvcHtmlString(s);
    }
public static MvcHtmlString FilterEditorFor(此HtmlHelper html,表达式
)
{
MvcHtmlString结果=新的MvcHtmlString(“”);
//返回MvcHtmlString.Create(TemplateHelpers.TemplateHelper(html,html.ViewData.ModelMetadata,String.Empty,null/*templateName*/,DataBoundControlMode.Edit,null/*additionalViewData*/);
ModelMetadata mm=html.ViewData.ModelMetadata;
字符串s=“”;
开关(mm.DataTypeName)
{
案例“日期时间”:
s=“”;
打破
案例“bool”:
s=“”;
打破
大小写“字符串”:
s=“”;
打破
违约:
打破
}
s=string.Format(s,mm.ModelType.Name+“”+mm.ShortDisplayName);
返回新的MvcHtmlString;
}

我似乎无法让自定义助手正常工作。有人有想法吗?

它以什么方式不“正常工作”?mm.DataTypeName总是空的。
    public static MvcHtmlString FilterEditorFor<TModel, TValue>(this HtmlHelper<IEnumerable<TModel>> html, Expression<Func<TModel, TValue>> expression
    )
    {
        MvcHtmlString result = new MvcHtmlString("");
        // return MvcHtmlString.Create(TemplateHelpers.TemplateHelper(html, html.ViewData.ModelMetadata, String.Empty, null /* templateName */, DataBoundControlMode.Edit, null /* additionalViewData */));
        ModelMetadata mm = html.ViewData.ModelMetadata;
        string s = "";
        switch (mm.DataTypeName)
        {
            case "DateTime":
                s = "<input id='{0}' class='xgFilterDate' type='text'>";
                break;
            case "bool":
                s = "<input id='{0}' class='xgFilterDate' type='checkbox'>";
                break;
            case "string":
                s = "<input id='{0}' class='xgFilterText' type='text'>";
                break;
            default:
                break;
        }
        s = string.Format(s, mm.ModelType.Name + "_" + mm.ShortDisplayName);
        return new MvcHtmlString(s);
    }