Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中使用视图模型_Javascript_Asp.net Mvc - Fatal编程技术网

在Javascript中使用视图模型

在Javascript中使用视图模型,javascript,asp.net-mvc,Javascript,Asp.net Mvc,情景: 一个局部视图有一个模型,我需要在单独的.js文件中使用javascript中的模型值 目前,我正在使用javascript内联,以便可以使用模型中的值,但是如果javascript被移动到一个单独的文件中,该怎么办呢。在这种情况下,如何获取这些值 代码 @model IEnumerable 接触 @foreach(模型中的变量名称) { @name.GroupName } $(文档).ready(函数(){ $(“#SpecFinder”).change(函数(){ getData(th

情景:

一个局部视图有一个模型,我需要在单独的.js文件中使用javascript中的模型值

目前,我正在使用javascript内联,以便可以使用模型中的值,但是如果javascript被移动到一个单独的文件中,该怎么办呢。在这种情况下,如何获取这些值

代码

@model IEnumerable
接触
@foreach(模型中的变量名称)
{
@name.GroupName
}
$(文档).ready(函数(){
$(“#SpecFinder”).change(函数(){
getData(this.value,@Model.ProductID');
});
})

这是我当前的示例代码,我想将内联javascript完全移动到一个单独的文件中。我该怎么做呢?我还需要模型中的值。

在视图中声明全局javascript变量
model
,如下所示。然后你可以在任何地方使用它

<script type="text/javascript">
    var model = @Html.Raw(Json.Encode(Model));
</script>
脚本

var model = JSON.parse($("#model").text());

我认为@Karan回应是一个不错的选择。但是如果您不想使用内联Javascript,可以将模型分配给隐藏的HTML输入,然后在任何其他需要的外部JS文件中检索该值

使用类似Html.Hidden的内容,例如:

@Html.Hidden("myModel", new Microsoft.Web.Mvc.MvcSerializer().Serialize(model, SerializationMode.Signed));
您可以在SerializationMode枚举中选择其他序列化模式


(代码未尝试,但应关闭)

将其添加到element@StephenMuecke,感谢您的回复,一两个都可以,在某些情况下,我需要像模型中的所有属性一样使用,在这种情况下,这是不可行的,对吗?但这是我最初的想法。谢谢@Karan,有没有办法不在局部视图中使用javascript?@RanjithVaradan我想Karan让你全局声明(你的局部视图将被合并的地方),这样你的JS将能够访问它,因为它在全局范围内。还可以将模型对象指定给
窗口
object@ZeeshanAdil我认为将模型对象指定给
窗口
对象是个坏主意,因为不鼓励使用这样的全局变量。@rpfc我同意你的看法。通常应避免使用全局变量。您不能将复杂对象分配给隐藏的输入(除非您将其序列化)。谢谢@StephenMuecke。复杂对象必须序列化(答案编辑)。
var model = JSON.parse($("#model").text());
@Html.Hidden("myModel", new Microsoft.Web.Mvc.MvcSerializer().Serialize(model, SerializationMode.Signed));