Asp.net mvc 重写ASP.NET MVC编辑器

Asp.net mvc 重写ASP.NET MVC编辑器,asp.net-mvc,Asp.net Mvc,是否可以覆盖ASP.NET MVC的EditorFor和DisplayFor 我想应用一些逻辑来决定是实际显示内容还是简单地输出“” 所以我想做一些类似的事情(伪代码): 这可能吗?听起来您想要一个扩展: public static MvcHtmlString MyEditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expr

是否可以覆盖ASP.NET MVC的
EditorFor
DisplayFor

我想应用一些逻辑来决定是实际显示内容还是简单地输出“”

所以我想做一些类似的事情(伪代码):


这可能吗?

听起来您想要一个扩展:

public static MvcHtmlString MyEditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) {
    if(ICanRender)
    {
        return System.Web.Mvc.Html.EditorExtensions.EditorFor(html, expression);
    }
    else
    {
        return MvcHtmlString.Create(string.Empty);
    }
}
public static MvcHtmlString MyEditorFor(此HtmlHelper html,表达式){
如果(渲染)
{
return System.Web.Mvc.Html.EditorExtensions.EditorFor(Html,表达式);
}
其他的
{
返回MvcHtmlString.Create(string.Empty);
}
}

该代码未经测试,但应该可以使用。

您可以创建自己的Html帮助程序,作为
HtmlHelper
HtmlHelper
的扩展方法。只需添加如下扩展方法:

public static MvcHtmlString MyEditorFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression)
{

}
或者,您可以根据需要创建自己的元素(或它们的组合):

public static MvcHtmlString MyEditorFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression)
{
    TagBuilder div = new TagBuilder("div");
    div.AddCssClass("some-css");

    MvcHtmlString editor = htmlHelper.TextBoxFor(expression);
    div.InnerHtml = editor.ToHtmlString();

    return new MvcHtmlString(div.ToString());
}
public静态MvcHtmlString MyEditorFor(
这个HtmlHelper HtmlHelper,
表达式(表达式)
{
标记生成器div=新标记生成器(“div”);
div.AddCssClass(“一些css”);
MvcHtmlString editor=htmlHelper.TextBoxFor(表达式);
div.InnerHtml=editor.ToHtmlString();
返回新的MvcHtmlString(div.ToString());
}

阅读有关标记生成器的更多信息

您可以将custon模型放在“视图/共享/编辑模板”或“视图/共享/显示模板”下,并将文件放在[Model name].cshtml下

例如:DateTime.cshtml

这样,所有在模型属性中定义了DateTime类型的编辑器和显示都将遵循DateTime.cshtml逻辑


问题是,如果要检索所需字段,您必须处理ViewData.TemplateInfo中的HTML。

不确定覆盖的含义可能重复,但您可以创建自己的显示和编辑器模板,这些模板将由这些方法用于呈现您不同意的内容,对于我在这个问题上的要求,它没有给出任何解决方案。我不想提供不同的模板。我想把逻辑放在这个问题上,建议添加一个不同的命名模板。如果愿意,您还可以创建自己的helper方法作为
EditorFor
DisplayFor
的覆盖do@AdilMammadov这正是我想做的。我如何在扩展方法中做到这一点?
public static MvcHtmlString MyEditorFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression)
{
    return htmlHelper.EditorFor(expression);
}
public static MvcHtmlString MyEditorFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression)
{
    TagBuilder div = new TagBuilder("div");
    div.AddCssClass("some-css");

    MvcHtmlString editor = htmlHelper.TextBoxFor(expression);
    div.InnerHtml = editor.ToHtmlString();

    return new MvcHtmlString(div.ToString());
}