将.net核心模型数据传递给外部javascript?

时间:2018-02-11 16:35:33

标签: javascript c# asp.net-core-mvc

我有一个.NET Core 2 Razor视图,其底层模型位于* .cshtml.cs文件中。让我们说我有一个这样的字符串:

public string myVar = "hello world";

如何在外部JavaScript文件中访问此变量(数据)?

我需要这个例子,例如以下情况。我正在使用jVectorMap jquery库。在那里,我可以选择地图的多个区域。我必须保存所选区域(例如,在一组唯一ID中),以便我可以使用所选区域预填充地图,如果用户加载包含内部地图的特殊页面。并且不同用户的数据(选定区域)可以不同。所以我必须为每个用户存储数据,并且必须加载数据。 jVectorMap有一个API函数,允许使用一些数据预先填充地图。

但是如何在外部javascript文件中访问我保存的变量/数据?

修改 我在这里添加了一个示例:https://dotnetfiddle.net/QV4Fi1

3 个答案:

答案 0 :(得分:3)

选项1

型号

public class MyModel
{
   public string MyProperty {get;set;}
}

<强> CSHTML

@model WebAppp.MyModel

@Html.HiddenFor(x=>x.MyProperty)

<强>的javascript

  $("#MyProperty").val();

选项2
 在控制器中,您可以存储在ViewData或ViewBag

 ViewBag["MyPropertyValue"]  ="something";

在cshml中(我没试过但应该工作)

@Html.Hidden("MyProperty",ViewData["MyPropertyValue"],new { @class = "someclass" })

<强>的javascript

  $("#MyProperty").val();

答案 1 :(得分:2)

您可以轻松地将 C#/ Razor 值作为字符串。

<script type="text/javascript">
    var i = parseInt('@Model.i');
</script>

或者你可以试试下面给出的选项。

选项1:

var myVar = '@Model.MyVar';
var name = '@Model.Name';

选项2:

var myVar ='@Html.Raw(Model.MyVar)';
var name = '@Html.Raw(Model.Name)';

答案 2 :(得分:1)

这是一个具有强类型ViewModel和 C#-list 的示例,该示例将序列化为js数组。

ViewModel:

namespace ProjectName.ViewModels
{
    public class MyViewModel
    {
        // List
        public List<string> MyList { get; set; }

        // a simple variable
        public string MyVar{ get; set; }
    }
}

在视图中,使用以下代码将C#-ViewModel的列表传递给JavaScript数组。

视图(* .cshtml):

@model MyProject.ViewModels.MyViewModel

<script type="text/javascript">
    var myArray = JSON.parse('@Json.Serialize(@Model.MyList)');
    var myVar = '@Model.MyVar';
</script>

您也可以使用对象代替列表。