我有一个.NET Core 2 Razor视图,其底层模型位于* .cshtml.cs文件中。让我们说我有一个这样的字符串:
public string myVar = "hello world";
如何在外部JavaScript文件中访问此变量(数据)?
我需要这个例子,例如以下情况。我正在使用jVectorMap jquery库。在那里,我可以选择地图的多个区域。我必须保存所选区域(例如,在一组唯一ID中),以便我可以使用所选区域预填充地图,如果用户加载包含内部地图的特殊页面。并且不同用户的数据(选定区域)可以不同。所以我必须为每个用户存储数据,并且必须加载数据。 jVectorMap有一个API函数,允许使用一些数据预先填充地图。
但是如何在外部javascript文件中访问我保存的变量/数据?
修改 我在这里添加了一个示例:https://dotnetfiddle.net/QV4Fi1
答案 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>
您也可以使用对象代替列表。