【问题标题】:Why won't my ascx file pick up my code behind properties?为什么我的 ascx 文件不能在属性后面提取我的代码?
【发布时间】:2011-06-29 22:08:50
【问题描述】:

我的网络应用是建立在另一个解决方案之上的解决方案。基本解决方案旨在成为多种产品的平台。在大多数情况下,这可以正常工作,但是当我创建特定于产品的视图时会发生奇怪的事情。

我正在使用ViewUserControl<SomeViewModel> 作为我的代码后面的类。在我后面的代码中,我可以访问this.Model 以及我期望从这个类中获得的所有其他好东西。但是在我的 ascx 文件中,当我尝试访问this.ModelViewUserControl 中定义的其他属性时,我得到了红色的波浪线。当我尝试访问直接在后面的代码中定义的属性时,我也会得到红色的波浪线。

更有趣的是,我没有从中得到任何真正的错误。该视图在运行时渲染得很好,并且没有给我任何构建错误。但是我的 ascx 文件认为会有错误。如果我在平台命名空间中创建完全相同的视图,它就可以正常工作。没有红色曲线。

我觉得这真的很烦人。无论如何,它都不是一个阻碍,但如果我要使用带有智能感知和所有爵士乐的 IDE,我肯定希望它能够正常工作,并获得应该存在的属性。

还有其他人遇到过这种情况吗?你知道解决这个问题的方法吗?

谢谢!

编辑

有人要求我发布一些代码。下面是代码:

namespace MyProject.MyProduct.Web.Views
{
    public class EditSearch : ViewUserControl<SearchResultsViewModel>
    {
        public bool IsSearchTypeA()
        {
            ...............
        }

        public bool IsSearchTypeB()
        {
            ...............
        }
    }
}

这是我的 ascx:

<% 
    if (!this.IsSearchTypeB())
    { 
        string categoryPageTitle = this.Model.SearchWidgetParameters.Search.CategoryPageTitle;
        string categoryPageUrl = this.Model.SearchWidgetParameters.Search.Filters.CategoryPageUrl;

        if (!string.IsNullOrEmpty(categoryPageUrl))
        {
            %> <div id="coid_website_backtoCategoryPageLink"> <%

            string tocGuid = this.Model.SearchWidgetParameters.Search.Filters.TocGuid;

            if (!string.IsNullOrEmpty(tocGuid))
            {
                categoryPageUrl += "?guid=" + tocGuid;
            }

            var backToLink = new HyperLink();

            if (this.IsSearchTypeA())
            {
                backToLink.Text = "Edit Search";
            }
            else
            {
                backToLink.Text = "Back to " + TranslatedHtmlTextWriter.Translate(categoryPageTitle);
            }

            backToLink.NavigateUrl = TransactionOperations.AddContextToUrl(categoryPageUrl.StartsWith("/Browse/") ? categoryPageUrl : "/Browse/" + categoryPageUrl,
                                                                            WebsiteTransitionType.Default, // Requested: CategoryPage
                                                                            TransactionOperations.DefaultContextData);
            backToLink.RenderControl(this.Writer);
            %>
                </div>
            <%
        } 
    }
%>

编辑

对于那些告诉我 ASP.NET MVC 不能或不使用背后代码的人,我很抱歉,但这是马曲棍球。该项目已经存在多年,并且有一个广泛使用的产品在其上运行。我的产品只是最近才跳上平台。 Platform 解决方案在所有地方都使用代码,并且运行良好。事实上,它在我的产品解决方案中运行时也可以正常工作,只是我的 ascx 文件似乎不知道我的代码背后的问题。此外,ViewUserControl 是一个 System.Web.MVC 类。你还要跟我说 ASP.NET MVC 中不使用后面的代码吗?

【问题讨论】:

  • 您不应该在 ASP.NET MVC 中使用代码。可以发一些代码吗?
  • 这让我很困惑。如果不使用后面的代码,那么我将如何访问我的模型的属性?后面的代码是我指定我的模型属于某种类型的地方。我不知道我还能如何获得这些属性。
  • 你使用的是什么版本的 MVC?我正在使用 MVC 3,但在文件后面看不到任何代码。我所说的“代码背后”是控制器和模型。
  • 你应该在
  • Inherits="System.Web.Mvc.ViewPage 抱歉,无法处理它在现在进入时发布的问题

标签: c# asp.net-mvc view code-behind


【解决方案1】:

由于您正在开发 MVC,因此您不能使用后面的代码。相反,您如何看待在 .acsx 文件顶部添加此内容:

<%@ Import Namespace="Namespace.Model" %>

然后您可以轻松访问其中的所有内容。

【讨论】:

  • 不能使用后面的代码?这没有任何意义。 Platform 解决方案在所有地方都使用代码,并且可以正常工作。那为什么不是我的呢?
  • 另外,该导入将如何帮助我访问模型的属性?我的模型属于特定类型,我需要该模型的特定属性。
  • 我使用我的命名空间和模型尝试了您的建议,但我仍然无法访问我的模型或其属性。
【解决方案2】:

ASP.NET MVC 不使用后面的代码。听起来您正在混合 ASP.NET MVC 和 ASP.NET WebForm 页面。

我建议你看看http://www.asp.net/mvc。它有一些关于 MVC 入门及其工作原理的精彩教程。

【讨论】:

  • 这个项目在 ASP.NET MVC 上已经存在多年了。我不需要启动项目。谢谢。
  • @Sumo,MVC 在 ASP.NET 之上运行的方式与 WebForms 相同,因此两者可以共存并在同一个项目中运行,就像您正在做的那样。我并不是要建议您需要启动该项目,而是您似乎对 MVC 的工作方式有误解。我得出这个结论是因为您似乎缺少一个控制器,它是 MVC 中的 C。
  • 我没有错过控制器,但感谢您的假设。后面代码的目的是指定模型的类型并添加一些辅助方法。呈现此视图的是我的控制器。我怎么才能看到风景?如果 ViewUserControl 不应该与 MVC 一起使用,为什么它是 Sytem.Web.MVC 类?
猜你喜欢
  • 2012-10-03
  • 2017-01-30
  • 2022-01-23
  • 2011-04-28
  • 1970-01-01
  • 2021-08-06
  • 2017-03-17
  • 2020-02-03
  • 1970-01-01
相关资源
最近更新 更多