如何在脚本文件中使用Razor视图中的Model?

时间:2014-04-09 12:04:34

标签: javascript asp.net-mvc razor

我需要将模型中的数据发送到我的脚本。 我做了类似的事情:

var model = @Html.Raw(Json.Encode(Model))
var data = model.Foobar;

它在视图中工作,但我必须在外部.js文件中使用此数据。

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

3 个答案:

答案 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>