我需要将模型中的数据发送到我的脚本。 我做了类似的事情:
var model = @Html.Raw(Json.Encode(Model))
var data = model.Foobar;
它在视图中工作,但我必须在外部.js文件中使用此数据。
您知道如何在我的脚本中从模型中获取数据吗?
答案 0 :(得分:3)
您可以在输入类型隐藏对象上加载模型数据,并在javascript上加载该数据。
<input type="hidden" id="yourParamName" value="@Model.whatever" />
然后,在您的js代码上,您只需要获取该信息
$("#yourParamName").val();
或没有jQuery
document.getElementById("yourParamName").value;
缺点是您的模型信息将在客户端视图中,任何人都可以访问...请注意以这种方式发布的信息。
答案 1 :(得分:2)
您不能在.js文件中使用Razor语法,因为Razor引擎不会在这些文件上运行。
您可以做的是设置javascript函数以获取Model数据的参数,或者设置一个javascript对象,该对象公开可以使用Model数据设置的属性,并在内部运行函数到对象。 (两个相同的想法,只有一个使用更高级别的闭包。)
所以在你的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>
答案 2 :(得分:0)
创建一个新的操作和视图,并只在其中放入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>