C# MVC Html帮助程序-对内置帮助程序有多大的控制?
我对ASP.NETMVC框架中的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
@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
。如何更改该值?我不确定您是否可以这样做。我唯一的建议是自己构建整个结果,就像最初的例子一样。谢谢你的建议。我要做一些实验。如果社区(包括您:)没有更好的解决方案,我会将您的答案标记为答案。