我正在尝试将 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
我的场景与提供的所有示例之间的主要区别在于,我不想让它与 Razor 一起使用。我很高兴我的观点是老式的 Aspx。
到目前为止,路由方面工作得很好,正确的控制器被命中并按预期运行。我可以成功地将东西放入 ViewData 并在适当的视图上使用它。直到强烈键入视图为止的所有内容都可以令人愉快地工作。
当我尝试制作强类型视图时,事情失败了,给出了以下错误消息:
“‘object’不包含‘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 都按预期工作。我无法弄清楚的一件事是将“继承”页面属性与适当的模型绑定器链接起来?这是我对可能缺少什么的最佳猜测。
编辑:无法解决这个问题,但这是我暂时想出的 hacky 解决方法。而不是将模型返回到视图,例如:
return View(retVal);
我已经把它放在 ViewBag 中,如下所示:
ViewBag.Model = retVal;
然后在视图的最顶部访问它,如下所示:
<% var Model = (WhateverType)ViewBag.Model; %>
超级hacky,但实现了相同的目标。:(
第二次编辑:
这是根据要求从 webconfig 中获取的信息。
<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);