在Javascript中使用View模型

时间:2018-07-16 09:58:14

标签: javascript asp.net-mvc

场景:

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

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

代码

@model IEnumerable<BookSpec.DomainEntities.ContactModel.ContactDataModel>
<label for="SpecFinder">Contact</label>
<select id="SpecFinder" name="state">
@foreach (var name in Model)
{
    <option value="@name.GroupID">@name.GroupName</option>
}
</select>

<script type="text/javascript">
    $(document).ready(function () {
        $("#SpecFinder").change(function(){
            getData(this.value,'@Model.ProductID');
        });
    })
</script>

这是我当前的示例代码,并且我想将内联javascript完全移至单独的文件。我该怎么做,我还需要模型中的值。

2 个答案:

答案 0 :(得分:2)

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

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

我建议使用上述解决方案。但是,如果仍然不想在局部视图中包含任何脚本,则可以在任何隐藏的div中呈现model。并使用object如下访问其文本并将其转换为JSON.parse。如下所示的代码不是一个好习惯,而补丁工作一样。

HTML

<div id="model" style="display:none;">
    @Html.Raw(Json.Encode(Model))
</div>

脚本

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

答案 1 :(得分:0)

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

例如,使用Html.Hidden之类的东西

@Html.Hidden("myModel", new Microsoft.Web.Mvc.MvcSerializer().Serialize(model, SerializationMode.Signed));

您可以在SerializationMode枚举中选择另一种序列化模式。

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