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;
缺点是,您的模型信息将出现在客户端视图中,任何人都可以访问。。。注意你用这种方式发布的信息。是的,我也是这么做的。我真的不喜欢,但它很管用,谢谢:)是的,我也是这么做的。这是一个有趣的想法,但确实有点过分,尤其是对于用户要求的内容。这是一个有趣的想法,但确实有点过分,尤其是对于用户要求的内容。