【问题标题】:Casting model in asp razor view inside javascript string在javascript字符串内的asp razor视图中铸造模型
【发布时间】: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... 只是常规输出,因为它不再受@ 的控制。

标签: c# javascript asp.net-mvc-3 view razor


【解决方案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>
}

【讨论】:

    猜你喜欢
    • 2014-10-15
    • 1970-01-01
    • 2014-02-18
    • 2015-08-30
    • 2014-12-26
    • 1970-01-01
    • 2019-07-25
    • 2020-04-29
    • 1970-01-01
    相关资源
    最近更新 更多