C# MVC Html帮助程序-对内置帮助程序有多大的控制?

C# MVC Html帮助程序-对内置帮助程序有多大的控制?,c#,asp.net-mvc,asp.net-mvc-3,html-helper,C#,Asp.net Mvc,Asp.net Mvc 3,Html Helper,我对ASP.NETMVC框架中的html帮助程序有一些疑问。所以 我是否可以覆盖内置的帮助程序,如@Html.HiddenFor 我应该覆盖,还是为创建一个CustomHiddenFor 创建自定义时,如何更改ModelMetaData中的值,然后调用内置的帮助器?例如: public static MvcHtmlString HiddenSecuredFor<TModel, TProperty> (this HtmlHelper<TModel> htmlHelp

我对ASP.NETMVC框架中的html帮助程序有一些疑问。所以

  • 我是否可以覆盖内置的帮助程序,如
    @Html.HiddenFor
  • 我应该覆盖,还是为创建一个
    CustomHiddenFor
  • 创建
    自定义
    时,如何更改
    ModelMetaData
    中的值,然后调用内置的帮助器?例如:

    public static MvcHtmlString HiddenSecuredFor<TModel, TProperty>
        (this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes,bool secured)
    {
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        var name = ExpressionHelper.GetExpressionText(expression);
        if (!secured)
        {
            return htmlHelper.HiddenFor(expression,htmlAttributes);
        }
    
            // Here I want to change the value 
            // from the TModel lets say the property is x => x.Name
            // And I want to make the Name = "Mr. " + Name
    
        // Call the inbuild helper with the expression value changes.
        return htmlHelper.HiddenFor(expression, htmlAttributes);
    }
    
    public static MvcHtmlString HiddenSecuredFor
    (此HtmlHelper HtmlHelper、表达式表达式、对象htmlAttributes、布尔安全)
    {
    ModelMetadata元数据=ModelMetadata.FromLambdaExpression(表达式,htmlHelper.ViewData);
    var name=ExpressionHelper.GetExpressionText(表达式);
    如果(!安全)
    {
    返回htmlHelper.HiddenFor(表达式,htmlAttributes);
    }
    //在这里,我想更改值
    //在TModel中,让我们假设属性为x=>x.Name
    //我想把名字改成=“先生”+名字
    //使用表达式值更改调用inbuild帮助程序。
    返回htmlHelper.HiddenFor(表达式,htmlAttributes);
    }
    
  • 是的-
  • 这取决于-如果您正在添加您始终需要的功能,并且您希望其他开发人员在不必知道的情况下使用它,那么重写是一个不错的选择。否则,创建一个调用原始文件的自定义文件是一个好方法

  • 谢谢你的回答和链接。但是3号呢?我不确定我是否完全理解您的意思,但元数据最终会转换为HtmlatAttributes,因此如果您希望添加自己的元数据,可以将其作为HtmlatAttributes传递。示例:
    htmlAttributes
    很容易重写,但是如何更改
    表达式的实际值。在编写
    @Html.HiddenFor(x=>x.Name)
    时,我们有1。包含属性信息(名称、类型等)的表达式树。2.值为
    x=>x.Name
    @model MyNiceViewModel
    。如何更改该值?我不确定您是否可以这样做。我唯一的建议是自己构建整个结果,就像最初的例子一样。谢谢你的建议。我要做一些实验。如果社区(包括您:)没有更好的解决方案,我会将您的答案标记为答案。