为啥我不能在我的用户控件中访问我的视图模型?

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 中缺少一个尖括号。最后应该有一个 &gt;,在 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 文件的物理访问权限? 是的。我的产品是建立在一个解决方案之上的,该解决方案旨在作为多个产品的平台。不允许产品接触平台解决方案中的任何代码。

以上是关于为啥我不能在我的用户控件中访问我的视图模型?的主要内容,如果未能解决你的问题,请参考以下文章

子视图不会自动实例化它们的“视图模型”

如何让我的 WPF 用户控件的依赖属性更新我的视图模型?

为啥我的依赖属性绑定没有按预期工作?

为啥我不能在我的快速路由中使用中间件?

为啥 BotUserData 在我的 Bot Framework 机器人中不能持久化和可检索?

如何从 viewmodel 访问用户控件上的命令