场景:
局部视图有一个模型,我需要在单独的.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完全移至单独的文件。我该怎么做,我还需要模型中的值。
答案 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枚举中选择另一种序列化模式。
(代码未尝试过,但应该关闭)