将 MVC4 混合到现有的 ASP.NET WebForms 项目中,现在强类型视图无法识别模型的类型

本文关键字:强类型 视图 类型 模型 识别 项目 混合 MVC4 ASP WebForms NET | 更新日期: 2023-09-27 18:31:00

我正在尝试将MVC4功能添加到现有的Webforms项目中。 我遵循了以下文章中概述的步骤:

http://blogs.ibs.com/Scott.Zischerk/Lists/Posts/Post.aspx?ID=20

http://www.packtpub.com/article/mixing-aspnet-webforms-and-aspnet-mvc

http://www.hanselman.com/blog/IntegratingASPNETMVC3IntoExistingUpgradedASPNET4WebFormsApplications.aspx

我的方案与提供的所有示例之间的主要区别在于,我不想让它与 Razor 一起使用。 我非常高兴我的观点是老派的Aspx。

到目前为止,路由方面运行良好,正确的控制器被击中并按预期运行。我可以成功地将内容放入 ViewData 并在适当的视图上使用它。 直到强烈输入视图为止,一切都令人愉快。

当我尝试创建强类型视图时,失败并显示以下错误消息:

" '对象'不包含'someProperty'的定义...'"

下面是一个未按预期工作的测试视图示例:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/MVC.Master" Inherits="System.Web.Mvc.ViewPage<TDS.Domain.Entities.SomeEntity>"  %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<h2> <%= Model.someProperty%></h2>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server">
</asp:Content>

我在这里被难住了,因为我相信我已经遵循了所有方向,让 MVC4 与现有的 WebForms 项目很好地配合使用。其他所有MVC-y都按预期工作。 我无法弄清楚的一件事是,是什么将"继承"页面属性与适当的模型绑定器链接起来?这是我对可能缺少什么的最佳猜测。

编辑:一直无法解决这个问题,但这是我暂时想出的黑客解决方法。而不是将模型返回到视图,如下所示:

return View(retVal);

我把它塞进了ViewBag,就像这样:

ViewBag.Model = retVal;

然后在视图的最顶部访问它,如下所示:

<% var Model = (WhateverType)ViewBag.Model; %>

超级笨拙,但达到了相同的目标。 :(

第2次编辑:

这是根据请求来自网络配置的位。

<runtime>
<assemblyBinding>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
</assemblyBinding>

控制器代码:

        SomeEntity retVal = new SomeEntity();
        using (TDS.Domain.TdsDatabase tds = new TDS.Domain.TdsDatabase())
        {
            retVal = tds.SomeEntitys.First(x => x.Id == 36);
        }
        return View(retVal);

将 MVC4 混合到现有的 ASP.NET WebForms 项目中,现在强类型视图无法识别模型的类型

您可能在 web.config 中缺少一些关键的 MVC 程序集:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>