cshtml页面的格式/布局

时间:2013-08-19 08:57:11

标签: asp.net-mvc-4 razor syntax

我之前就这个问题得到了很多帮助,但问题并没有完全解决。我现在卡在另一件事上了。我从我的控制器返回一个响应,并在Index.cshtml中接收它,如下所示:

var rData = @Html.Raw(Json.Encode(Model.WarehouseResults));

现在我需要将这些数据分配给slickgrid,如下所示:

  <script type="text/javascript">

  var from = 0, to = from + rData.length;
//data.length = parseInt(resp.total);
for (var i = 0; i < rData.length; i++) {
    data[from + i] = rData[i];
    data[from + i].index = from + i;
}

onDataLoaded.notify({ from: from, to: to });

   grid = new Slick.Grid("#myGrid", rData, columns, options);

 etc etc...

</script>

现在,问题是,我不知道接收数据到底在哪里。如在,我在哪里放这一行:

var rData = @Html.Raw(Json.Encode(Model.WarehouseResults));

如果我将它放在标签上方(但在@Scripts部分内),我会收到一条错误,说明没有定义rData。然后当我把它放在标签中时,我得到一个语法错误,说:“IHtmlString HtmlHelper.Raw(String value)(+ 1重载)返回非HTML编码的标记”。

这条线究竟应该去哪里?是否有cshtml页面的标准格式,比如哪些部分去哪里?如果是这样,有人可以提供链接或其他东西吗?

1 个答案:

答案 0 :(得分:0)

在MVC 5中使用您的代码: -

var rData = @Html.Raw(Json.Encode(Model.WarehouseResults));

我发现行尾的分号会导致语法错误。

我目前使用的解决方案(我的示例是用于JQuery自动完成)也适用于您的示例,如下所示。

在HtmlHelper中完全创建javascript变量代码。这是放在视图的@section Scripts中。

@section Scripts {
    <script type="text/javascript">
        @Html.Raw("var existingPersons = " +  Json.Encode(this.Model.ExistingPersons) + ";" )
        @Html.Raw("var settlementInformation="  + Json.Encode(this.Model.SettlementInformation) + ";")

        $(function () {
            $("#personName").autocomplete({
                source: existingPersons
            });

            $("#settlementInformation").autocomplete({
                source: settlementInformation
            });
        });
    </script>
}

在客户端,它会按预期显示在<head>元素中

<script type="text/javascript">
    var existingPersons = ["Person 1","Person 2"];
    var settlementInformation=["Settlement Type 1"];

    $(function () {
        $("#personName").autocomplete({
            source: existingPersons
        });

        $("#settlementInformation").autocomplete({
            source: settlementInformation
        });
    });
</script>

我没有在其他版本的MVC中试过这个