Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从用法推断类型参数。尝试显式指定类型参数_C#_Linq_Generics_Asp.net Mvc 2_Expression - Fatal编程技术网

C# 无法从用法推断类型参数。尝试显式指定类型参数

C# 无法从用法推断类型参数。尝试显式指定类型参数,c#,linq,generics,asp.net-mvc-2,expression,C#,Linq,Generics,Asp.net Mvc 2,Expression,有人能帮我澄清一下吗。在我的ASP.NET MVC 2应用程序中,我有一个BaseViewModel类,其中包括以下方法: public virtual IDictionary<string, object> GetHtmlAttributes<TModel, TProperty> (Expression<Func<TModel, TProperty>> propertyExpression) {

有人能帮我澄清一下吗。在我的ASP.NET MVC 2应用程序中,我有一个
BaseViewModel
类,其中包括以下方法:

public virtual IDictionary<string, object> GetHtmlAttributes<TModel, TProperty>
                        (Expression<Func<TModel, TProperty>> propertyExpression)
{
    return new Dictionary<string, object>();
}
公共虚拟IDictionary GetHtmlatAttribute
(表达式属性Expression)
{
返回新字典();
}
其思想是,每个子viewmodel都可以覆盖此方法,并根据某些逻辑提供一组适当的html属性,以便在视图中呈现:

<%: Html.TextBoxFor(model => model.MyProperty, Model.GetHtmlAttributes
                                                 (model => model.MyProperty)) %>
model.MyProperty,model.GetHtmlAttributes
(model=>model.MyProperty))%>
但是,当在上面一行中使用时,当我点击视图时,会出现编译错误:

<%: Html.TextBoxFor(model => model.MyProperty, Model.GetHtmlAttributes
                                                 (model => model.MyProperty)) %>

方法“
…BaseViewModel.GetHtmlAttributes Expression”的类型参数指的是类型而不是实例。在第二个和第四个代码示例中,将示例中的“Model”改为小写

Model.GetHtmlAttributes
应该是

model.GetHtmlAttributes
C#编译器只有lambda

arg => arg.MyProperty

对于arg的推断类型(TModel),使用arg.MyProperty(TProperty)类型。这是不可能的。

在您的示例中,编译器无法知道
TModel应该是什么类型。您可以做一些接近您可能正试图用扩展方法做的事情

static class ModelExtensions
{
   public static IDictionary<string, object> GetHtmlAttributes<TModel, TProperty>
      (this TModel model, Expression<Func<TModel, TProperty>> propertyExpression)
   {
       return new Dictionary<string, object>();
   }
}

我有同样的问题,我的解决方案:
在web.config文件中:


我知道这个问题已经有了公认的答案,但对于我这个.NET初学者来说,有一个简单的解决方案来解决我做错了什么,我想我会与大家分享

我一直在这样做:

@Html.HiddenFor(Model.Foo.Bar.ID)
对我起作用的是:

@Html.HiddenFor(m => m.Foo.Bar.ID)

(其中“m”是表示模型对象的任意字符串)

如果有帮助,我在将
null
传递到泛型
TValue
的参数时遇到了这个问题,要解决这个问题,您必须转换null值:

(string)null

(int)null

等等。

此错误也与缓存问题有关


我也遇到了同样的问题,它被解决了,只是清理再次构建解决方案。

我实际上在搜索一个类似的错误,谷歌把我送到这里来问这个问题。 错误是:

方法的类型参数 'IModeExpressionProvider.CreateModelExpression(ViewDataDictionary,Expression>)' 无法从用法中推断

我大概花了15分钟想弄明白。它发生在Razor.cshtml视图文件中。 我必须对视图代码的某些部分进行注释,才能找到它的作用所在,因为编译器帮不上什么忙

<div class="form-group col-2">
    <label asp-for="Organization.Zip"></label>
    <input asp-for="Organization.Zip" class="form-control">
    <span asp-validation-for="Zip" class="color-type-alert"></span>
</div>

你能认出它吗?是 啊我可能重新检查了两次,一开始没拿到

查看ViewModel的属性是
Zip
,而它应该是
Organization.Zip
。就这样


因此,请重新检查您的视图源代码…:-)

神圣的蝙蝠侠!是的,完全正确。在我们30英寸的显示器上,在这些小窗口中来回滚动代码只得到6.5英寸,这是荒谬的。来吧,SA伙计们,拿上你们的VC钱,开始动态调整页面大小吧!谢谢你的建议,但我需要给它一个模型对象的特定实例(公开视图的模型属性)。'model'实际上不存在于TextBoxFor helper的htmlAttributes参数的上下文中。非常感谢Jim!你救了我一天,我在谷歌上搜索了好几天,没有找到主要问题的解决方案,但在这里的一个小评论中找到了你的问题!我正在使用MVC4.0附带的VS 2012,是的,添加了targetFramework=“4.0”解决了ViewBag、Html.TextboxFor等下的红线问题。我打开了一个新的,使用了您的答案,并获得了信任。希望它能帮助别人。谢谢吉姆,你救了我一天。你能解释一下为什么这个targetFramework很重要吗?您是如何发现的?对我来说,这也是一个缓存问题,但只有在重新启动Visual Studio后才得到解决。对我来说,这是在更新被引用模型的名称空间之后发生的。我遇到了这个问题,它也在为我缓存!在这种情况下,这很好,但对于某些HtmlHelper扩展来说是不可接受的。实际上,我创建了以下扩展:
publicstatic IHtmlContent EnumCheckBoxListFor(此IHtmlHelper-htmlHelper,Expression-Expression,object-htmlAttributes=null)
。在这种情况下,我无法使用虚拟/覆盖解决方案(而且我看不到任何“干净”的解决方案)。请注意,当我在视图中调用它时,模型类型可以推断,而枚举类型不能。谢谢。我也有同样的问题,这个答案对我帮助很大。似乎在“asp for”或“asp validation for”上使用不存在的属性名会导致该异常。
<div class="form-group col-2">
    <label asp-for="Organization.Zip"></label>
    <input asp-for="Organization.Zip" class="form-control">
    <span asp-validation-for="Zip" class="color-type-alert"></span>
</div>