.NET Core将JavaScript与CSHTML分离并访问ViewData

时间:2016-08-08 09:47:46

标签: javascript html asp.net-core

有没有办法从单独的JavaScript文件访问ViewData,就像您可以从CSHTML上的嵌入式JavaScript代码访问它一样?

我想分离我的JavaScript代码并直接在我的JavaScript文件中加载数据,而不是在我的HTML中使用隐藏字段,然后通过GetElementById访问它,因为将数据从HTML传递到JavaScript似乎很乏味然后再回到HTML。

CSHTML文件

@using StatisticOndoAppCore.Models.ViewModels;
@using { var info = (Shop)ViewData["ShopInfo"]; }

嵌入式JavaScript代码

subscriptionShopData = [
        { y: 'Uge ' + @info.currentWeek,         a: @info.creationsCurrentWeek },
        { y: 'Uge ' + @info.currentWeek - 1,     a: @info.creationsLastWeek },
        { y: 'Uge ' + @info.currentWeek - 2,     a: @info.creationsCurrentWeekMinusTwo },
        { y: 'Uge ' + @info.currentWeek - 3,     a: @info.creationsCurrentWeekMinusThree }
    ];

new Morris.Bar({
        element: 'bar-subscriptions-shop',
        data: subscriptionShopData,
...

1 个答案:

答案 0 :(得分:1)

您无法访问JavaScript文件中的ViewData,因为JavaScript文件是静态文件。但您可以使用隐藏的输入(或数据属性)并使用ViewData设置值。然后,它允许您访问JavaScript中隐藏输入的值。

查看类似的Stack Overflow问题: Access a Model property in a javascript file?

更新(以下代码可能有用,但未经过测试)

@section scripts
{
    <script>
       $(function(){
        var  subscriptionShopData = [
        { y: 'Uge ' + @info.currentWeek,         a: @info.creationsCurrentWeek },
        { y: 'Uge ' + @info.currentWeek - 1,     a: @info.creationsLastWeek },
        { y: 'Uge ' + @info.currentWeek - 2,     a: @info.creationsCurrentWeekMinusTwo },
        { y: 'Uge ' + @info.currentWeek - 3,     a: @info.creationsCurrentWeekMinusThree }
       ];
    });
    </script>
    <script src="..."></script>// use subscriptionShopData  variable in this js
}