在javascript字符串内的asp razor视图中铸造模型

Posted

技术标签:

【中文标题】在javascript字符串内的asp razor视图中铸造模型【英文标题】:Casting model in asp razor view inside javascript string 【发布时间】:2011-07-22 16:02:30 【问题描述】:

我的视图生成了一些 js 代码。我需要将我的模型转换为接口类型以获取一些属性。

这是一个例子:

<script type="text/javascript" language="javascript">
var js_array = [];
@for (var i = 0; i < ( Model as MyProject.Models.IMyInterface ).PropertyList.Count; i++) 
    <text>
        js_array['@( Model as MyProject.Models.IMyInterface ).PropertyList[i].id'] = ;
    </text>

</script>

我明白了:

<script type="text/javascript" language="javascript">
var js_array = [];
js_array['MyProject.Models.MyModelType.PropertyList[i].id'] = ;
js_array['MyProject.Models.MyModelType.PropertyList[i].id'] = ;
js_array['MyProject.Models.MyModelType.PropertyList[i].id'] = ;
js_array['MyProject.Models.MyModelType.PropertyList[i].id'] = ;
js_array['MyProject.Models.MyModelType.PropertyList[i].id'] = ;
js_array['MyProject.Models.MyModelType.PropertyList[i].id'] = ;
js_array['MyProject.Models.MyModelType.PropertyList[i].id'] = ;
js_array['MyProject.Models.MyModelType.PropertyList[i].id'] = ;
</script>

但我需要:

<script type="text/javascript" language="javascript">
var js_array = [];
js_array['1'] = ;
js_array['2'] = ;
js_array['3'] = ;
js_array['4'] = ;
js_array['5'] = ;
js_array['6'] = ;
js_array['7'] = ;
js_array['8'] = ;
</script>

你可以看到这个显示类型而不是值...

你能告诉我为什么以及如何解决它吗?

【问题讨论】:

之所以这样是因为@()是一个特殊的块,它只解析()中包含的内容。您的代码只有() 中的类,因此它在该类上调用ToString,然后假定.PropertyList... 只是常规输出,因为它不再受@ 的控制。 【参考方案1】:

你好像少了几个括号。

@for (var i = 0; i < ( Model as MyProject.Models.IMyInterface ).PropertyList.Count; i++) 
    <text>
        js_array['@( (Model as MyProject.Models.IMyInterface).PropertyList[i].id )'] = ;
    </text>

我会让它更具可读性,例如:

@foreach ( var property in ((MyProject.Models.IMyInterface)Model).PropertyList ) 
    <text>
        js_array['@(property.id )'] = ;
    </text>

如果你的模型实现了接口,那么你甚至不需要演员表,制作它:

@foreach ( var property in Model.PropertyList ) 
    <text>
        js_array['@(property.id)'] = ;
    </text>

【讨论】:

以上是关于在javascript字符串内的asp razor视图中铸造模型的主要内容,如果未能解决你的问题,请参考以下文章

javascript asp .net mvc razor中的访问模型

在 ASP.NET Core Razor 页面中使用 JavaScript 更改活动导航栏链接

ASP.NET Razor Pages JavaScript 文件返回未定义的错误

将数据从 javascript 传递到 asp.net core 2 razor 页面方法

在 asp.net mvc razor 应用程序中将 Datetime C# 类型转换为 Date javascript

在 ASP.NET 核心中解析 Razor 字符串