7

我想在 C# 块代码之间使用 html 标签,我已经尝试过了,但我遇到了错误。如何在 cshtml 文件中的 C# 块代码之间插入 html 标签?

错误是:

只有赋值调用自增自减和新对象表达式可以作为语句使用

只有赋值调用递增递减等待和新对象表达式可以用作语句 在此处输入图像描述

@{
    Func<List<Comment>, Comment, HelperResult> ShowTree = null;
    ShowTree = (items, node) =>
    {
        @<text>
            <ul>
                @foreach (var comment in items)
                {

                }
            </ul>
         </text>;
        return null;
    };

}

更新:当我将文本移到 {} 之外时,我也遇到了一些错误。看这张图片。 在此处输入图像描述

更新2: 我用过@:但还是有问题。那是;expected

我怎么解决这个问题?

在此处输入图像描述

@{
Func<List<Comment>, Comment, int, HelperResult> ShowTree = null;
ShowTree = (items, parentItem, parentId) =>
{
    var count = items.Count(p => p.ParentId == parentId);
    if (count > 0)
    {
        @:<ul>
            foreach (var item in items.Where(p => p.ParentId == 
 parentId).ToList())
            {
            @:<li>
                string collapseId = string.Format("collapse_{0}", item.Id);
                @:<a class="btn btn-link" data-toggle="collapse" 
 href="#@{collapseId}" aria-expanded="True" aria-controls="@{collapseId}">
                    @:<span class="fa fa-minus" aria-hidden="true"> 
 Commenter Name</span>
                @:</a>
                    @:<div class="collapse show" id="@{collapseId}">
                        @:<div class="card">
                                @:<p>item.Description</p>
                        @:</div>
                            ShowTree(items, item, item.Id);
                    @:</div>
            @:</li>
            }
        @:</ul>
    }
    return null;
  };
};

更新 3:浏览器中带有错误消息的最新代码

@using Jahan.Beta.Web.App.Helper
@using Jahan.Beta.Web.App.Models
@using Microsoft.AspNetCore.Mvc.Razor
@using Jahan.Beta.Web.App.Helper
@model List<Comment>

@{
   Func<List<Comment>, Comment, int, HelperResult> ShowTree = null;
   ShowTree = (items, parentItem, parentId) =>
   {
   var count = items.Count(p => p.ParentId == parentId);
   if (count > 0)
   {
   @:<ul>
   @<text>@{
        foreach (var item in items.Where(p => p.ParentId ==    
   parentId).ToList())
        {
            string collapseId = string.Format("collapse_{0}", item.Id);
            <li>
                <a class="btn btn-link" data-toggle="collapse" href="@collapseId" aria-expanded="True" aria-controls="@collapseId">
                <span class="fa fa-minus" aria-hidden="true"> Commenter Name</span></a>
                <div class="collapse show" id="@collapseId"><div class="card"><p>@item.Description</p></div>
                    @ShowTree(items, item, item.Id);
                </div>
            </li>
        }
}</text>

@:</ul>
}
return null;
};
}


 @{
 Func<List<Comment>, HelperResult> CreateTree = null;
 CreateTree = commentList => new Func<List<Comment>, HelperResult>(
 @<text>@{
    List<Comment> nodesRoot = commentList.Where(p => p.ParentId == 
 null).ToList();
    <ul>
        @foreach (var comment in nodesRoot)
        {
            <li>
                <p>@comment.Description</p>
                @ShowTree(commentList, comment, comment.Id);
            </li>
        }
    </ul>
  }
   </text>)(null);
  }

<div class="media mb-4">
<div class="media-body">
    @CreateTree(Model)
</div>

</div>

最新代码

浏览器中显示的错误消息

编译处理此请求所需的资源时出错。请查看以下特定错误详细信息并适当修改您的源代码。生成的代码

; 预期的

4

5 回答 5

7

cshtml对于使用中的 C# 代码块的内联转义@:。例如:

@{
    Func<List<Comment>, Comment, HelperResult> ShowTree = null;
    ShowTree = (items, node) =>
    {
        @:<ul>
            foreach (var comment in items)
                {

                }
        @:</ul>
        return null;
    };
}
于 2018-01-15T13:03:54.723 回答
2

正如我所见,您想通过将 Html 与 C# 代码混合来呈现一些内容,而不是将 C# 代码插入到 cshtml 文件中,您可以创建自定义 Html 帮助程序,它将是这样的:

     public static class CustomHtmlHelper
        {
            public static IHtmlContent ShowTree(this IHtmlHelper htmlHelper)
            {
                Func<List<Comment>, Comment, HelperResult> ShowTree = null;

                var builder = new StringBuilder();

                ShowTree = (items, node) =>
                {
                    builder.Append("<ul>");

                    foreach (var comment in items)
                    {
                        builder.Append("<li>"+comment.Content+"</li>");

                    }
                    builder.Append("</ul>");
                    return null;
                };

                //Just for testing purposes only

                var comments = new List<Comment> { new Comment { Content = "Comment 1" }, new Comment { Content = "Comment 2" } };

                ShowTree(comments, new Comment());

                //
                return new HtmlString(builder.ToString());

            }
        }
  • 在 cshtml 中

    @Html.ShowTree()

于 2018-01-19T17:18:47.627 回答
0

它可以帮助你吗?

@{
Func<List<Comment>, Comment, int, HelperResult> ShowTree = null;

ShowTree = (items, parentItem, parentId) =>
{
var count = items.Count(p => p.ParentId == parentId);
if (count > 0)
{
        @:<ul>
    foreach (var item in items.Where(p => p.ParentId == parentId).ToList())
{
    string collapseId = string.Format("collapse_{0}", item.Id);
            @<text>
            <li>
                <a class="btn btn-link" data-toggle="collapse"
                   href="@{collapseId}" aria-expanded="True" aria-controls="@{collapseId}">
                    <span class="fa fa-minus" aria-hidden="true"> Commenter Name</span>
                </a>
                <div class="collapse show" id="@{collapseId}">
                    <div class="card">
                        <p>@item.Description</p>

                    </div>
                    @ShowTree(items, item, item.Id);
                </div>
            </li>
            </text>
                    }
@:</ul>
}
return null;
};
}
于 2018-01-24T06:52:05.310 回答
0

你为什么不把and<text>移到. 像这样 :<ul>{}

<text>
<ul>
    @{
        Func<List<Comment>, Comment, HelperResult> ShowTree = null;
        ShowTree = (items, node) =>
        {

            foreach (var comment in items)
            {
            }
            return null;
        };

    }
</ul>
</text>;

将您的代码分隔在多个括号中

@{
    var commentList = new List<string>();
}
<text>
    <ul>
        @foreach (var comment in commentList)
        {
            <li>@comment</li>
        }

    </ul>
</text>;
于 2018-01-13T16:31:18.323 回答
-1

删除@之前的<text>.

于 2018-01-12T19:31:31.223 回答