【问题标题】:Create a table using jquery inside razor view在 razor 视图中使用 jquery 创建表
【发布时间】:2017-09-19 23:09:30
【问题描述】:

我想在 razor 视图中创建一个表格。

<div class="row" style="margin-left:80%">
    @if (ViewBag.IsGlobal == 1)
    {
        <script>
            $(document).ready(function () {
                $("#btnViewLocal").prop("disabled",true);

                @foreach (var item in Model.GlobalNewsModel)
                {

                    var gTable = "<tr class=\"tvl\">";
                    gTable += "<td>";
                    gTable += "<input id=\"testid\" value=\"testvalue\" class=\"form-control\" />";
                    gTable += "<td>";
                    gTable += "</tr>";
                    //gTable.append("#wholeNews tr:last").after(gTable); <-- I tried it like this it also not working.
                }
                $("#WholeNews tr:last").after(gTable); // I can't place thisone inside foreach loop,it's unrecognize the $
            });
        </script>
    }
}
</div>

那么

我在没有foreach 循环的情况下对该表进行了硬编码,它可以正常工作。但我的要求是将该表放入 foreach 循环中。供您参考,我已将其放在这里。

var gTable = "<tr class=\"tvl\">";
gTable += "<td>";
gTable += '<input id="' + $(this).closest('tr').find('td :eq(0)').val() + "newsno" + '" disabled type="text\" class=\"form-control" value="' + $(this).closest('tr').find('td :eq(0)').val() + '">';
gTable += "</td>";
gTable += "</tr>";
$("#WholeNews tr:last").after(gTable);

【问题讨论】:

  • 您的@foreach() 循环是剃须刀代码,并在视图发送到浏览器之前在服务器上进行解析。那时还不存在 Javascript。为什么不只是使用 razor/html 创建表格?

标签: jquery html json asp.net-mvc razor


【解决方案1】:

如何在客户端制作循环:

@if (ViewBag.IsGlobal == 1)
{
    <script>
        $(document).ready(function () {
            $("#btnViewLocal").prop("disabled", true);

            // serialize the server side model on the client
            var news = @Html.Raw(Json.Encode(Model.GlobalNewsModel));

            // loop through the news javascript variable on the client
            for (var i = 0; i < news.length; i++) {
                // here you can access news[i] if you need to print
                // some values from your model in the table

                var gTable = "<tr class=\"tvl\">";
                gTable += "<td>";
                gTable += "<input id=\"testid\" value=\"testvalue\" class=\"form-control\" />";
                gTable += "<td>";
                gTable += "</tr>";
                gTable.append("#wholeNews tr:last").after(gTable);
            }
        }
    </script>
}

另外请注意,如果您不需要在客户端访问news[i],那么您可能不需要序列化您的模型,您只需要长度即可:

var newsLength = @Model.GlobalNewsModel.Length;
for (var i = 0; i < newsLength; i++) {
    ...
}

但我猜你需要模型值。另请注意,您只能在客户端上投影您真正需要的值,以避免在标记中浪费不必要的空间:

var news = @Html.Raw(Json.Encode(Model.GlobalNewsModel.Select(x => new
{
    foo = x.Foo,
    bar = x.Bar,
})));
for (var i = 0; i < news.length; i++) {
    // you can access news[i].foo and news[i].bar here
    ...
}

【讨论】:

  • var news = @Html.Raw(Json.Encode(Model.GlobalNewsModel));它告诉我用红色和语法错误在分号下划线。
  • 有缺陷的 Visual Studio Razor Intellisense 向您展示什么并不重要。你还在看吗?您是否尝试运行代码?我建议你点击F5 并享受结果。
  • 我尝试了您的第一个代码,但没有任何项目显示在屏幕上。
  • 您检查了标记吗?看起来还好吗?您是否在控制台中收到一些 javascript 错误?
  • 这很正常。您已将 gTable 声明为字符串。当然,它不会有append 方法。现在修复你的javascript代码,你会很高兴的。不要只是盲目地从 StackOverflow 复制粘贴。
猜你喜欢
  • 2019-05-14
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多