2

我看到有人提出了类似的问题,但我认为其中没有一个专门针对我所看到的环境差异。我有一个包含 的 ASP.NET Web 窗体应用程序,GridView我手动将其绑定到实体框架实体的集合。我正在使用一个BoundField引用我的一个实体上的导航属性的 。

以前的帖子表明这不受支持,但整个解决方案在 Windows 7 上运行的 IIS 7.5 中完美运行。但是,当应用程序部署到在 Windows Server 2003 R2 上运行 IIS 6 的 Web 服务器时,它会失败并显示HttpException

“在所选数据源上找不到名为 'Worker.FullName' 的字段或属性。”

这是代码的相关摘要:

实体:

public class WorkerAssignment
{
    public Guid Id { get; set; }
    public Guid WorkerId { get; set; }

    public virtual Worker Worker { get; set; }
}

public class Worker
{
    public Guid Id { get; set; }

    public string FullName { get; set; }
}

ASPX:

<asp:GridView 
    ID="gvWorkers" 
    runat="server" 
    AutoGenerateColumns="False" 
    DataKeyNames="Id"
>
    <Columns>
        <asp:BoundField 
            DataField="Worker.FullName" 
            SortExpression="Worker.FullName" 
            HeaderText="Worker Name" 
        />
    </Columns>
</asp:GridView>

两台服务器都运行 .NET Framework 4.0.30319。IIS 7.5 和 IIS 6 之间有什么区别导致代码在前者环境中正常运行而在后者环境中失败?

4

2 回答 2

10

我也面临同样的问题。类似的代码DataField="Worker.FullName"工作正常,但突然开始在 DEV 上抛出错误,但在localhost. 我无法指出确切的问题。

解决我的问题的唯一解决方法是替换asp:BoundFieldasp:TemplateField使用<%# Eval("Worker.FullName")%>

于 2013-10-23T17:09:25.047 回答
0

我们在 IIS 7.0 中遇到了这个问题。两台服务器运行完全相同的 IIS 版本、相同的应用程序池版本 (4) 和相同的代码副本,但一台失败,另一台运行正常。

在进一步调查问题后,我注意到 System.Environment.Version 返回不同的版本,接近但不同。

这是一个快速测试,您可以运行它来验证 ASP.NET 中的版本:

ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + System.Environment.Version + "');", true);

根据我的研究,版本 4.0.30319.1026 受该错误影响,而版本 4.0.30319.34209 工作正常。第一个似乎是 .NET 4.0 的一部分,而最后一个似乎是 4.5 的一部分。

将运行 .NET 4.0 的服务器升级到 4.5 后,该问题得到解决。

于 2016-11-02T22:04:41.743 回答