Javascript 如何在脚本文件中使用Razor视图中的模型?

Javascript 如何在脚本文件中使用Razor视图中的模型?,javascript,asp.net-mvc,razor,Javascript,Asp.net Mvc,Razor,我需要将数据从模型发送到脚本。 我做了这样的事情: var model = @Html.Raw(Json.Encode(Model)) var data = model.Foobar; 它在视图中工作,但我必须在外部.js文件中使用这些数据 您知道如何在脚本中从模型中获取数据吗?您不能在.js文件中使用Razor语法,因为Razor引擎不在这些文件上运行 您可以做的是设置javascript函数以获取模型数据的参数,或者设置javascript对象,该对象公开可以使用模型数据设置的属性,并在对

我需要将数据从模型发送到脚本。 我做了这样的事情:

var model = @Html.Raw(Json.Encode(Model))
var data = model.Foobar;
它在视图中工作,但我必须在外部.js文件中使用这些数据


您知道如何在脚本中从模型中获取数据吗?

您不能在.js文件中使用Razor语法,因为Razor引擎不在这些文件上运行

您可以做的是设置javascript函数以获取模型数据的参数,或者设置javascript对象,该对象公开可以使用模型数据设置的属性,并在对象内部运行函数。(两者都有相同的想法,只有一个使用了更高级别的闭包。)

因此,在javascript文件中,如果您只想使用函数参数,可以执行以下操作:

var myFunction = function(razorModel) {
    // your javascript function steps go here.
};
那么在你看来,你可以有类似的东西:

<script type="text/javascript">
    $(document).ready(function() { // If you're using jQuery, otherwise, just make sure this runs after you other javascript file gets loaded.

        myFunction(@Html.Raw(Json.Encode(Model)));
    });
</script>

$(document).ready(function(){//如果您使用的是jQuery,否则,请确保在加载其他javascript文件后运行该命令。
myFunction(@Html.Raw(Json.Encode(Model));
});

您不能在.js文件中使用Razor语法,因为Razor引擎没有在这些文件上运行

您可以做的是设置javascript函数以获取模型数据的参数,或者设置javascript对象,该对象公开可以使用模型数据设置的属性,并在对象内部运行函数。(两者都有相同的想法,只有一个使用了更高级别的闭包。)

因此,在javascript文件中,如果您只想使用函数参数,可以执行以下操作:

var myFunction = function(razorModel) {
    // your javascript function steps go here.
};
那么在你看来,你可以有类似的东西:

<script type="text/javascript">
    $(document).ready(function() { // If you're using jQuery, otherwise, just make sure this runs after you other javascript file gets loaded.

        myFunction(@Html.Raw(Json.Encode(Model)));
    });
</script>

$(document).ready(function(){//如果您使用的是jQuery,否则,请确保在加载其他javascript文件后运行该命令。
myFunction(@Html.Raw(Json.Encode(Model));
});

创建一个新的操作和视图,只在其中添加javascript

public ActionResult MyModelScript(int id)
{
    var Model = something;
    return View(Model);
}
你的看法:

@model MyModelClass

function DoSomething()
{
    alert("@(Model.property)");
}
使用此视图时,请将其视为常规javascript文件:

<script type="text/javascript" 
src="@Url.Content("~/Scripts/MyModelScript/" + Model.id)"></script>

创建一个新的操作和视图,只在其中添加javascript

public ActionResult MyModelScript(int id)
{
    var Model = something;
    return View(Model);
}
你的看法:

@model MyModelClass

function DoSomething()
{
    alert("@(Model.property)");
}
使用此视图时,请将其视为常规javascript文件:

<script type="text/javascript" 
src="@Url.Content("~/Scripts/MyModelScript/" + Model.id)"></script>

您可以将模型数据加载到输入类型的隐藏对象上,然后将该数据加载到javascript上

<input type="hidden" id="yourParamName" value="@Model.whatever" />
或者不使用jQuery

document.getElementById("yourParamName").value;

缺点是,您的模型信息将出现在客户端视图中,任何人都可以访问。。。注意以这种方式发布的信息。

您可以将模型数据加载到输入类型的隐藏对象上,然后将该数据加载到javascript上

<input type="hidden" id="yourParamName" value="@Model.whatever" />
或者不使用jQuery

document.getElementById("yourParamName").value;

缺点是,您的模型信息将出现在客户端视图中,任何人都可以访问。。。注意你用这种方式发布的信息。

是的,我也是这么做的。我真的不喜欢,但它很管用,谢谢:)是的,我也是这么做的。这是一个有趣的想法,但确实有点过分,尤其是对于用户要求的内容。这是一个有趣的想法,但确实有点过分,尤其是对于用户要求的内容。