Vấn đề cơ bản là không tương thích giữa đối tượng được tạo từ điều khiển máy chủ IFRAME của biểu mẫu Web của trình biên dịch ASP.NET (biên dịch tệp ASPX và ASCX thành mã C# hoặc VB) và loại biến tương ứng với điều khiển đó trong mã Biểu mẫu web của bạn phía sau. Điều khiển máy chủ IFRAME (<iframe id="frame" runat="server" />
) sẽ được phân tích cú pháp dưới dạng điều khiển của một loại cụ thể. Trong ASP.NET 4, một điều khiển máy chủ IFRAME sẽ là một điều khiển HtmlGenericControl. Trong ASP.NET 4.5, một điều khiển máy chủ IFRAME sẽ là một điều khiển HtmlIframe.
Sự cố có thể được khắc phục bằng cách đảm bảo rằng thuộc tính targetFramework trên phần tử biên dịch trong tệp web.config đồng ý với thuộc tính Khung mục tiêu của dự án của bạn và biến tương ứng với điều khiển máy chủ IFRAME của bạn khớp với loại điều khiển trình biên dịch ASP.NET sẽ tạo ra.
Dự án ASP.NET 4 đã được chuyển đổi thành .NET Framework 4.5 trong Visual Studio 2013 sẽ sửa đổi web của dự án.tệp cấu hình để thuộc tính targetFramework của phần tử biên dịch có giá trị là "4.5" (<compilation targetFramework="4.5"/>
). Điều này làm cho trình biên dịch ASP.NET xử lý điều khiển máy chủ IFRAME dưới dạng điều khiển HtmlIframe. Điều này có thể gây ra sự cố nếu mã Biểu mẫu web phía sau biến điều khiển vẫn là HtmlGenericControl. Lỗi bạn thấy giống như sau:
Lớp cơ sở bao gồm khung 'trường', nhưng loại của nó (System.Web.UI.HtmlControls.HtmlGenericControl) không tương thích với loại điều khiển (System.Web .UI.HtmlControls.HtmlIframe).
Giải pháp cho lỗi trước đó là cập nhật loại biến kiểm soát máy chủ tương ứng với điều khiển máy chủ IFRAME. Bạn có thể thực hiện việc này bằng cách lưu lại tệp HTML của biểu mẫu web sẽ khiến tệp thiết kế được tạo lại. Theo như tôi có thể thấy (trong Visual Studio 2013 ít nhất) thay đổi ID kiểm soát là không cần thiết. Nếu biến điều khiển máy chủ nằm trong mã phía sau tệp, nó phải được cập nhật theo cách thủ công.
Dự án ASP.NET 4.5 nơi mã sau biến là một HtmlIframe sẽ gặp vấn đề tương tự nhưng khác nhau nếu thuộc tính targetFramework của phần tử biên dịch trong tệp web.config có giá trị là "4.0" (<compilation targetFramework="4.0"/>
). Điều này làm cho trình biên dịch ASP.NET điều trị kiểm soát máy chủ IFRAME dưới dạng điều khiển HtmlGenericControl. Lỗi bạn thấy giống như sau:
Lớp cơ sở bao gồm khung 'trường', nhưng loại của nó (System.Web.UI.HtmlControls.HtmlIframe) không tương thích với loại điều khiển (System.Web .UI.HtmlControls.HtmlGenericControl).
Cách khắc phục lỗi trước đó là đảm bảo cài đặt biên dịch web.config đồng ý với thuộc tính Khung mục tiêu của dự án. Trong trường hợp này thuộc tính targetFramework của phần tử biên dịch trong web.config phải có giá trị là "4.5".
<compilation targetFramework="4.5"/>
Lưu ý: Thiết lập thuộc tính targetFramework yếu tố httpRuntime để 4.5 cũng sẽ có tác dụng thiết lập thuộc tính targetFramework các yếu tố tổng hợp để 4.5. Xem http://blogs.msdn.com/b/webdev/archive/2012/11/19/all-about-httpruntime-targetframework.aspx để biết thêm thông tin.
Lưu ý 2: Không có thẻ <asp:HtmlIframe>
. Đăng ký tiền tố thẻ "asp" vào không gian tên System.Web.UI.HtmlControls không phải là thứ cần thiết để sử dụng điều khiển máy chủ IFRAME.
Trả lời không đề cập đến bạn phải thêm không gian tên 'System.Web.UI.HtmlControls' vào Web.config. (Xem Panoj để có câu trả lời hoàn chỉnh). –
Hoặc thêm không gian tên trong tệp aspx cụ thể. –