为啥我不能在我的用户控件中访问我的视图模型?
Posted
技术标签:
【中文标题】为啥我不能在我的用户控件中访问我的视图模型?【英文标题】:Why can't I access my viewmodel in my user control?为什么我不能在我的用户控件中访问我的视图模型? 【发布时间】:2011-03-01 20:54:07 【问题描述】:我尝试了几种不同的方法:
1:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyNameSpace.MyModel>" %>
2:
<%@ Import Namespace="MyNameSpace.MyModel" %>
但无论我做什么,我都无法访问this.Model
或其他任何我希望看到的东西。项目中的其他控件和页面能够访问这些,并且没有一个开发人员能够告诉我为什么他们的可以而我的不能。有什么想法吗?
编辑
从那时起,我创建了一些控件和页面。有时,智能感知会毫无问题地找到 this.Model
。它还可以找到 html.RenderPartial()
之类的东西以及它应该找到的各种其他好东西。所以,对于那些告诉我智能感知在视图中不起作用的人来说,你错了。确实如此。但在所有观点中并不一致。据我和任何其他开发人员所知,我没有做任何不同的事情。我尝试过的事情:
有时这些步骤可以解决问题,但对于某些控件,我就是无法让红色的波浪线消失!这不是世界末日,因为它不会产生运行时错误,但我想了解这里发生了什么。肯定有人经历过这种情况并了解了问题的根源。
【问题讨论】:
第一个定义是正确的。你是如何传递视图模型的?你是什么意思,你不能访问它?你收到错误消息还是什么?请描述得更详细一点。 您在 1 中缺少一个尖括号。最后应该有一个>
,在 MyModel
之后。不知道是不是笔误。
您导入的命名空间与“继承”声明中的通用模型类具有完全相同的名称。导入应该只是“MyNameSpace”。
或者如果你确实有一个与你的类同名的命名空间,你真的应该改变它。 Eric Lippert 有一篇很棒的博文,说明了原因:blogs.msdn.com/b/ericlippert/archive/2010/03/09/…
@Samo,你真的信任 Intellisense 吗?我不。运行应用程序时会发生什么?那是真的。两种可能性:如果您期望得到答案,您将在此处发布错误,或者您的应用程序将运行良好,并且您将永远不会信任 Intellisense、语法突出显示,......在未来。
【参考方案1】:
您也可以尝试将其添加到 web.config 中:
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="MyHtmlHelperLibrary.HtmlExtensions"/>
<add namespace="MyOtherNamespace"/>
</namespaces>
【讨论】:
产品无权访问平台的 Web.config。不过感谢您的建议。 @Samo - ?你的评论没有意义?你是说你没有对 web.config 文件的物理访问权限? 是的。我的产品是建立在一个解决方案之上的,该解决方案旨在作为多个产品的平台。不允许产品接触平台解决方案中的任何代码。以上是关于为啥我不能在我的用户控件中访问我的视图模型?的主要内容,如果未能解决你的问题,请参考以下文章