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

Opa*_*114 6 javascript c# asp.net-core-mvc

我有一个 .NET Core 2 Razor 视图,其中包含一个 *.cshtml.cs 文件中的底层模型。假设我有一个这样的字符串:

public string myVar = "hello world";
Run Code Online (Sandbox Code Playgroud)

如何在我的外部 JavaScript 文件中访问这个变量(数据)?

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

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

编辑: 我在这里添加了一个例子:https : //dotnetfiddle.net/QV4Fi1

LP1*_*P13 7

选项1

模型

public class MyModel
{
   public string MyProperty {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

cshtml

@model WebAppp.MyModel

@Html.HiddenFor(x=>x.MyProperty)
Run Code Online (Sandbox Code Playgroud)

javascript

  $("#MyProperty").val();
Run Code Online (Sandbox Code Playgroud)

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

 ViewBag["MyPropertyValue"]  ="something";
Run Code Online (Sandbox Code Playgroud)

在 cshml 中(我还没有尝试过,但应该可以工作)

@Html.Hidden("MyProperty",ViewData["MyPropertyValue"],new { @class = "someclass" })
Run Code Online (Sandbox Code Playgroud)

javascript

  $("#MyProperty").val();
Run Code Online (Sandbox Code Playgroud)


laz*_*per 6

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

<script type="text/javascript">
    var i = parseInt('@Model.i');
</script>
Run Code Online (Sandbox Code Playgroud)

或者您可以尝试使用以下给定的选项。

选项1:

var myVar = '@Model.MyVar';
var name = '@Model.Name';
Run Code Online (Sandbox Code Playgroud)

选项 2:

var myVar ='@Html.Raw(Model.MyVar)';
var name = '@Html.Raw(Model.Name)';
Run Code Online (Sandbox Code Playgroud)

  • @Opa114 您可以在内联脚本中提取值并将其传递到外部 js 文件的函数中。 (3认同)

Sim*_*mon 6

Here is an example with an strong typed ViewModel and an C#-list which will be serialized into an js-array.

The ViewModel:

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

        // a simple variable
        public string MyVar{ get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

In the view use the following code to pass the list of your C#-ViewModel to an JavaScript array.

The View (*.cshtml):

@model MyProject.ViewModels.MyViewModel

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

Instead of the list you can also use an object.