首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET MVC -获取TModel属性值

ASP.NET MVC -获取TModel属性值
EN

Stack Overflow用户
提问于 2015-02-17 14:45:16
回答 2查看 7.2K关注 0票数 0

我有一个ASP.NET MVC应用程序是用C#编写的。我的应用程序有一个非常具体的一次性扩展方法。目前,我的扩展方法如下所示

代码语言:javascript
复制
public static MvcHtmlString CreateControl<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> items, object htmlAttributes = null)
{
  var name = ExpressionHelper.GetExpressionText(expression);
  var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
  var model = htmlHelper.ViewData.Model;
  ...

  int i = 0;
  i = i + 1;
}

我在Visual中的“int i = 0;”窗口中设置了一个断点,可以看到model中的值列表。model有一个名为"MyValue“的属性。虽然我可以在“监视”窗口中看到它,但我不知道如何从代码中获得"MyValue“的值。modelTModel。我似乎不能对它进行类型转换。此外,我没有看到一个助手函数或任何东西。

如何从TModel对象获取属性值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-17 14:50:00

模型是一个TModel

TModel不是一个类型--它是一个泛型参数。扩展方法是通用的,这意味着它可以与任何类型的模型一起运行。编译器无法在编译时知道模型有哪些属性,所以在编译时没有反射、转换或动态就无法访问它们,所有这些都不是运行时安全的。

我的应用程序有一个非常具体的一次性扩展方法。

不,这种方法是通用的。它可以适用于任何类型的模型。如果希望它特定于一种模型类型,那么就不要泛化模型类型:

代码语言:javascript
复制
                                                                  V----- specific type ----------------V
public static MvcHtmlString CreateControl<TValue>(this HtmlHelper<MyModel> htmlHelper, Expression<Func<MyModel, TValue>> expression, IEnumerable<SelectListItem> items, object htmlAttributes = null)
{
  var name = ExpressionHelper.GetExpressionText(expression);
  var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
  var model = htmlHelper.ViewData.Model;
  ...

  int i = 0;
  i = i + 1;
}
票数 3
EN

Stack Overflow用户

发布于 2015-02-17 14:52:32

您似乎有一个类型的TModel,它每次都要求它具有相同的属性。我将使所有这些类型都实现一个接口,并添加如下约束:

代码语言:javascript
复制
public interface IMyModel
{
    MyValue { get; set; }
}

现在添加约束:

代码语言:javascript
复制
public static MvcHtmlString CreateControl<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> items, object htmlAttributes = null) 
    where TModel : IMyModel
{
    var myModel = (IMyModel)htmlHelper.ViewData.Model;
    //Now you can read the property:
    var value = myModel.MyValue;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28564035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档