如何在mvc razor视图中从IEnumerable <model>返回索引模型?</model>

时间:2014-05-21 13:14:45

标签: javascript asp.net-mvc razor

我在当前的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一起使用?在控制器中,对象警告始终为空!!!!

3 个答案:

答案 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");

或其他一些解决警告参数的工作。