【问题标题】:how generic types are inferred automatically in mvc razor如何在 mvc razor 中自动推断泛型类型
【发布时间】:2014-12-21 18:53:07
【问题描述】:

简单的 Html.HiddenFor 签名如下。

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

而且用法很简单@Html.HiddenFor(model=> model.PropertyName)

我的问题是,如何在 MVC 中自动推断泛型类型。我使用了一些具有相同参数类型的泛型方法,但是当我不指定类型时,它表示无法自动推断泛型类型。

【问题讨论】:

    标签: asp.net-mvc generics lambda


    【解决方案1】:

    当您像这样为视图指定模型时:

    @model TModel
    

    您基本上创建了一个派生自System.Web.Mvc.WebViewPage&lt;TModel&gt; 的视图。 现在,如果您查看该类的实现,您会发现以下代码:

     public abstract class WebViewPage<TModel> : WebViewPage
        {
            private ViewDataDictionary<TModel> _viewData;
    
            public new AjaxHelper<TModel> Ajax { get; set; }
    
            public new HtmlHelper<TModel> Html { get; set; }
    
            public new TModel Model
            {
                get { return ViewData.Model; }
            }
    

    在这里你可以看到它有一个 HtmlHelper 属性:

     public new HtmlHelper<TModel> Html { get; set; }
    

    所以基本上,这里的泛型类型是自动推断的,因为您在此视图中使用的所有帮助器都是 HtmlHelper&lt;TModel&gt; 的扩展(其中 TModel 是您之前指定的模型)

    【讨论】:

    • 谢谢。这说得通。所以我提取的是当你在类级别指定泛型类型时,你不需要指定每个函数。这就是 MVC 正在做的事情。
    猜你喜欢
    • 2015-08-07
    • 2020-10-12
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多