我正在尝试设置ASP.Net MV5应用程序以使用ReactJS.Net,包括服务器端呈现和捆绑。
不幸的是,它失败了这个例外:
React.dll中出现“React.TinyIoC.TinyIoCResolutionException”类型的异常,但未在用户代码中处理
其他信息:无法解析类型:React.ReactEnvironment
此行发生此异常:
@Scripts.Render("~/bundles/ui-components")
这一行是我的_layouts.cshtml
文件。
我该如何解决我的问题?
详细说明,我在这里做了什么:
:
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”(实际上只有一个“commentsbox.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>
);
}
});
答案 0 :(得分:3)
我终于找到了问题的根源。
实际上,错误消息具有误导性。在ReactConfig.Configure
方法中,通配符不起作用(即*.jsx
不起作用)。
我用这个替换了方法:
public static void Configure()
{
ReactSiteConfiguration.Configuration
.AddScript("~/content/ui/commentsbox.jsx").
.AddScript("~/content/ui/comment.jsx");
}
它解决了这个问题。