Casting model in asp razor view inside javascript string
My view generates some j开发者_运维知识库s code. I need to cast my Model to interface type to get some properties.
Here is an example:
<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>
I got:
<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>
But I need:
<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>
As you can see this display type instead of value...
Can you tell me why and how can I fix it?
It seems you're missing a couple of parentheses.
@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>
}
I would make it a bit more readable like:
@foreach ( var property in ((MyProject.Models.IMyInterface)Model).PropertyList ) {
<text>
js_array['@(property.id )'] = {};
</text>
}
And if your model implements the interface then you don't even need the cast, making it:
@foreach ( var property in Model.PropertyList ) {
<text>
js_array['@(property.id)'] = {};
</text>
}
精彩评论