2

同様の質問が寄せられているようですが、私が目にしている環境の違いに具体的に対処しているとは思いません。GridViewエンティティ フレームワーク エンティティのコレクションに手動でバインドしているを含む ASP.NET Web フォーム アプリケーションがあります。BoundFieldエンティティの 1 つでナビゲーション プロパティを参照するを使用しています。

以前の投稿では、これはサポートされていないことが示されていますが、ソリューション全体が 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

0

IIS 7.0 でこの問題が発生しました。まったく同じ IIS バージョン、同じアプリケーション プール バージョン (4)、同じコードのコピーを実行している 2 つのサーバーが、一方が失敗し、もう一方が正常に動作しています。

問題をさらに調査した後、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 に答える