C# 在javascript字符串内的asp razor视图中强制转换模型

C# 在javascript字符串内的asp razor视图中强制转换模型,c#,javascript,asp.net-mvc-3,view,razor,C#,Javascript,Asp.net Mvc 3,View,Razor,我的视图生成了一些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

我的视图生成了一些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>
您可以看到此显示类型而不是值


你能告诉我为什么以及如何修复它吗?

看来你少了几个括号

@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>
}

你好像少了几个括号

@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>
}

原因是@是一个特殊的块,它只解析。您的代码中只有类,因此它在类上调用ToString,然后调用.PropertyList。。。假定它只是常规输出,因为它不再受@的控制。原因是@是一个特殊的块,只解析包含在中的内容。您的代码中只有类,因此它在类上调用ToString,然后调用.PropertyList。。。被认为只是常规输出,因为它不再受@的控制。