gpt4 book ai didi

c# - MVC3 扩展方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:43 25 4
gpt4 key购买 nike

编辑:感谢 David Ruttka,在查看 Mvc3 的 RTM 版本中的 LabelExtensions.cs 后,我能够弄明白。

对于字段名称:字符串字段 = ExpressionHelper.GetExpressionText(表达式);

对于模型,我需要为 Helper 指定我想要转换的模型 -其中 TModel:Foo然后我可以得到模型:BarTypeEnum barType = ((Foo)html.ViewData.Model).BarType;

我已将下面的源更新为适合我的内容。

/编辑

我正在尝试创建一个类似于 Mvc3 中的 LabelFor 的 html 辅助函数,以返回基于 Foo.BarType 的字符串值和从 html 传入的 Foo 字段的名称。

在下面的 FooLabelFor 函数中,如何获取传递给函数的模型和字段名称?

我一直在寻找 System.Web.Mvc.HtmlLabelFor 的源代码,但无法在 Mvc3 源代码中找到它。

//model class
public class Foo
{
public string Bar { get; set; }
public BarTypeEnum BarType { get; set; }
}

//html helper class
public static class HtmlHelpers {
public static string FooLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) where TModel:Foo
{
BarTypeEnum barType = ExpressionHelper.GetExpressionText(expression);
string field = ((Foo)html.ViewData.Model).BarType;
return GlobalizeText(enumHelper.stringvalue(barType), field);
}
}

//html
@model Foo
<div>@Html.FooLabelFor(m => m.Bar)</div>

最佳答案

您希望将栏类型和字段名称作为附加参数传递给助手,如下所示:

public static string FooLabelFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, BarTypeEnum barType, string fieldName)
{
//...
}

然后您需要在帮助程序的主体中添加一些代码以确定标签的适当文本,假设您将该文本放入名为 theText 的变量中。现在你只需要:

var theLabel = htmlHelper.Label(id, HttpUtility.HtmlEncode(theText));

return MvcHtmlString.Create(theLabel);

希望对您有所帮助。

关于c# - MVC3 扩展方法 <TModel, TValue>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10321677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com