【发布时间】:2015-01-26 12:41:19
【问题描述】:
我正在尝试设置一个 ASP.Net MV5 应用程序以使用 ReactJS.Net,包括服务器端渲染和捆绑。
不幸的是,它失败并出现以下异常:
React.dll 中出现“React.TinyIoC.TinyIoCResolutionException”类型的异常,但未在用户代码中处理
附加信息:无法解析类型:React.ReactEnvironment
此异常发生在这一行:
@Scripts.Render("~/bundles/ui-components")
这一行是我的_layouts.cshtml 文件。
我应该如何解决我的问题?
为了详细说明,这里我做了什么:
-
在 BundleConfig.cs 中:
bundles.Add(new ScriptBundle("~/bundles/reactjs").Include( "~/Scripts/react/react-{version}.js")); bundles.Add(new JsxBundle("~/bundles/ui-components") .Include("~/content/ui/components/*.jsx"));我用我所有的 jsx 文件创建了一个文件夹“Content/ui/components”(实际上只有一个来自教程的“cmetsbox.jsx”文件。
-
在 ReactConfig.cs 中,我删除了
WebActivatorEx.PreApplicationStartMethod属性,因为 MVC5 不再支持这个属性,这是 Owin 组件的好处。它仍然包含:public static class ReactConfig { public static void Configure() { ReactSiteConfiguration.Configuration .AddScript("~/content/ui/*.jsx"); } } -
在我的
Global.asax.cs文件中,我显式调用ReactConfig.Configure方法来替换WebActivatorEx.PreApplicationStartMethod挂钩:public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { ReactConfig.Configure(); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } } -
我的
_layouts.cshtml视图包含(在文件底部):@Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @Scripts.Render("~/bundles/reactjs") @Scripts.Render("~/bundles/ui-components") @RenderSection("scripts", required: false) @Html.ReactInitJavaScript() -
在我看来:
@{ ViewBag.Title = "Home Page"; } <div id="content"></div> @section scripts { @Html.React("CommentBox", new {}, containerId:"content") } -
最后,我的 jsx 文件:
var CommentBox = React.createClass({ render: function() { return ( <div class="row"> <div class="col-md-4"> hello </div> </div> ); } });
【问题讨论】:
标签: asp.net-mvc-5 inversion-of-control reactjs tinyioc reactjs.net