【问题标题】:Error CS1513 } expected. Compiler being over picky?错误 CS1513 } 预期。编译器过于挑剔?
【发布时间】:2018-08-28 08:59:10
【问题描述】:

这是我的代码。这只是我在文本编辑器中编辑的基本 cshtml 页面(不是 MVC)。 Visual Studio 并没有太大帮助,它似乎与编译器存在相同的问题。

代码正在将“计划”中的步骤列表打印到从数据库查询中检索的表中。可能有多个计划,每次有新计划时,我都想在面板中显示其名称,然后在表格中显示其步骤。这意味着关闭当前表并开始一个新表。

当它们“不合适”时,编译器似乎无法处理结束标记。我尝试过使用和不使用Html.Raw(),结果相似。有没有一种技术可以工作并允许它编译?

@{
    var db = Database.Open("CADDatabase");
    var count=0;
    var num="0";
    var image="blank";
    var APName="blank";
    // Attached action plan for incident
    var APIncidentQuery=@"select action_plan_name, action_plan_item_types.item_type_eng, pre_mobilisation_flag, instruction_text, isnull(action_plan_active.instruction_information,' ') as instruction_information, item_status_eng
    from action_plan, action_plan_active, action_plan_item_types, action_plan_status
    where action_plan_item_types.item_type=action_plan_active.item_type 
    and action_plan_active.item_status=action_plan_status.item_status 
    and action_plan.action_plan_id=action_plan_active.action_plan_id
    and action_plan_active.eid=(select min(eid) from agency_event where num_1=@0) order by action_plan_active.action_plan_id, active_item_id";
}
<!DOCTYPE html>
<html>
 <head>
   <link rel="stylesheet" href="theme.css">
   <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
   <title>Process Action Plan</title>
 </head>
 <body>
    <!-- Panel header with search box -->
    <div class="container-fluid ">
        <div class="row no-gutters">
            <div class="col-xs-12">
                <div class="panel panel-default">
                    <div class="panel-heading clearfix">
                        <form method="get" class="col-xs-3">
                            <div class="input-group">
                                <input class="form-control" type="text" placeholder="Event id" name="EventId" size="12">
                                <span class="input-group-btn">
                                    <button class="btn btn-primary" type="submit">Search</button>
                                </span>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
        <!-- Header row -->
        <div class="row no-gutters">
            @foreach(var row in db.Query(APIncidentQuery,Request.QueryString["EventId"])){
                image="Images/ActionPlans/" + @row.item_type_eng + ".png";
                // New plan
                if (row.action_plan_name != APName) {
                    // Close off previous table if there is one
                    if (APName != "blank") {
                        Html.Raw("</tbody></table></div></div>");
                    } 
                    <!-- Start new table -->
                    <div class="col-xs-12">
                        <div class="panel panel-warning">
                            <div class="panel-heading">
                                <div class="plan-header">
                                    <img src="http://swi-hsiv-ps03/UKApps/Images/checklist-warning.png" height="32">
                                    <h3 class="panel-title">Action plan items (@row.action_plan_name)</h3>
                                </div>
                            </div>
                            <!-- Table of results -->
                            <table class="table table-condensed table-striped">
                               <thead>
                                   <tr>
                                       <th>#</th>
                                       <th>Type</th>
                                       <th>Pre-dispatch</th>
                                       <th>Instruction</th>
                                       <th>Additional Info</th>
                                   </tr>
                               </thead>
                               <tbody>
                    <!-- store plan name for next iteration -->
                    @{
                        APName=row.action_plan_name;
                    }
                <!-- Populate new table -->
                } 
                <!-- List Action Plan items -->
                <tr>
                    <td>@row.item_number</td>
                    <td><img src="@image" height="30" title="@row.item_type_eng"></td>
                    @if (row.pre_mobilisation_flag == "Y") {
                        <td><img src="images/ActionPlans/done-red.png" title="Y" height="30"></td>
                    } else {
                        <td><img src="images/ActionPlans/delete-grey.png" title="N" height="30"></td>
                    }
                    <td>@row.instruction_text</td>
                    @if (row.instruction_information.Length > 4 && row.instruction_information.Substring(0,5) == "http:") {
                        <td><a href=@row.instruction_information>Additional information</a></td>
                    } else {
                        <td>@row.instruction_information</td>
                    }
                </tr>
            }
        @{
            Html.Raw("</tbody></table></div></div>");
        }
        </div>
    </div>
</body>
</html>

【问题讨论】:

  • 按照找到的提示here
  • 我相信没有办法绕过它。由于&lt;table&gt; 标记在foreach 循环中打开,因此预计会在循环内找到&lt;/table&gt; 标记。您需要调整标记,我相信这也会使标记更清晰。
  • @vfle 是的,谢谢我看过那个帖子。
  • @TasosK。这有点像说“您需要以不同的方式编写它”。但实际上,这就是我所做的 - 将其重写为 2 个查询,每个查询都有一个 foreach 循环。谢谢。
  • 我认为是多重查询。尝试将所有内容放在一行中,看看是否是原因。

标签: asp.net razor


【解决方案1】:

通过重写为 2 个查询来修复,一个用于获取计划列表,另一个用于列出每个查询中的项目。然后这些表完全包含在 foreach 循环中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    相关资源
    最近更新 更多