为什么我的ascx文件不会在属性后面提取我的代码?

时间:2011-02-18 15:44:28

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

我的网络应用是基于另一种解决方案构建的解决方案。基础解决方案旨在成为多种产品的平台。在大多数情况下,这种方法很好,但在创建特定于产品的视图时会发生奇怪的事情。

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

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

我发现这真的很烦人。它无论如何都不是一个表演终结者,但是如果我要使用具有intellisense和所有爵士乐的IDE,我肯定希望它能够正常工作,并选择应该存在的属性。 / p>

有没有其他人遇到这个?你知道解决这个问题的方法吗?

谢谢!

修改

要求我发布一些代码。这是背后的代码:

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不能或不使用代码的人,我很抱歉,但这是马曲棍球。该项目已经存在多年,并且有一个广泛使用的产品在其上运行。我的产品最近刚刚进入平台。平台解决方案使用遍布各处的代码,并且工作正常。事实上,它在我的产品解决方案中运行时运行良好,我只是遇到问题,我的ascx文件似乎不知道我的代码背后。此外,ViewUserControlSystem.Web.MVC类。你还在告诉我,ASP.NET MVC中没有使用后面的代码吗?

2 个答案:

答案 0 :(得分:0)

由于您正在开发MVC,因此无法使用代码。相反,您如何考虑在.acsx文件的顶部添加它:

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

然后你就可以访问那里的所有内容而不会有太多的复杂情况。

答案 1 :(得分:0)

ASP.NET MVC不使用代码。听起来好像是在混合使用ASP.NET MVC和ASP.NET WebForm页面。

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