我在当前的mvc razor视图中有IEnumerable,我想将所选元素发送到子视图(弹出窗口)。
当前视图具有模型:@model IEnumerable<warning>
我想通过查询字符串发送IEnumerable<warning>[index]
到子视图:
window.open("//WarningDetail?warning=" + IEnumerable<warning>[index], "_blank")
我的代码将在网格面板中显示列表的网格面板和所选元素 将在新的弹出窗口中显示详细信息。所以这是主要观点:
@model IEnumerable<WIS_3_0.Models.warning>
warningGrid.Listeners.ItemDblClick.Fn = "selected";
@section JavaScript
{
<script type="text/javascript" src="@Url.Content("/wis.js")"></script>
<script>
var selected = function (dv, record, item, index, e) {
window.open("/Examples/WarningDetail?warning=" + Model.ElementAt((int)index), "_blank", "left=100,top=100,width=400,height=300,toolbar=1,resizable=0");
// Ext.Msg.alert(a);
};
</script>
}
控制器:
[HttpGet]
public ActionResult WarningDetail(warning warning)
{
return View(warning);
}
和子视图(WarningDetail.cshtml):
@model WIS_3_0.Models.warning
@{
ViewBag.Title = "WarningDetail";
}
<h2>WarningDetail</h2>
@if(@Model == null)
{
<h4>null</h4>
}
最好的方法是什么?并且字符串查询是否与javascript函数window.open一起使用?在控制器中,对象警告始终为空!!!!
答案 0 :(得分:1)
您正在将服务器端代码(Model
)与客户端JavaScript(index
)混合使用。如果需要在客户端上派生结果,并且在呈现标记/视图时无法确定index
的值,则需要在服务器上呈现所有可能的值,然后在运行时从该列表中选择使用index
。
有些事情如下:
<script>
var warningValues = [];
@foreach(var item in Model)
{
warningValues.push(@item);
}
var selected = function (dv, record, item, index, e) {
window.open("/Examples/WarningDetail?warning=" + warningValues[index],
"_blank",
"left=100,top=100,width=400,height=300,toolbar=1,resizable=0");
// Ext.Msg.alert(a);
};
</script>
如果项目的枚举很长,您应该重构代码以在服务器上进行确定,并避免将数据传递给客户端的开销。如果列表很短,这可能是一个不错的方法。
答案 1 :(得分:0)
IEnumerable<>
没有索引属性。相反,您可以使用Model.ElementAt(index)
。但是,如果您显示其余代码,可能会稍微容易一些。
答案 2 :(得分:0)
我认为这里的问题是如何将警告参数呈现给JS基本上+ Model....
处理,因为JS代码可以在下面尝试使用。
window.open("/Examples/WarningDetail?warning=@Model.ElementAt((int)index), "_blank", "left=100,top=100,width=400,height=300,toolbar=1,resizable=0");
或其他一些解决警告参数的工作。