【问题标题】:Html syntax not recognized inside If condition of Razor MVC在 Razor MVC 的 If 条件中无法识别 Html 语法
【发布时间】:2023-03-12 10:40:01
【问题描述】:

以下是我用于我的 mvc 视图之一的代码,在提到的 if 条件内,html 代码无法识别。

<table class="table">
        <tr class="row h4">
            <td>Task</td>
            <td>Parameter</td>
            <td>Active</td>
            <td><input type="button" class="btn btn-default" value="Add Mapping" /></td>
        </tr>
        @foreach (OrderTypeTaskParameterMapping mapping in Model.OrderTypeTaskParameterMappings)
        {
            <tr class="row">
                <td>
                    <select class="form-control">
                        @foreach (Task task in Model.Tasks)
                        {
                            <option value="@task.Id"
                                    @if (mapping.TaskId == task.Id)
                                    {
                                        selected="selected" **doesn't work**
                                    }
                                    >@task.Name</option>
                        }
                    </select>
                </td>
                <td>
                    <select class="form-control">
                        @foreach (Parameter p in Model.Parameters)
                        {
                            <option>@p.Name</option>
                        }
                    </select>
                </td>
                <td>
                    @if (mapping.Active)
                    {
                        <input type="button" class="btn btn-info" value="Active" />
                    }
                    else
                    {
                        <input type="button" class="btn btn-danger" value="InActive" />
                    }
                </td>
                <td><input type="button" class="btn btn-info" value="Save" /></td>
            </tr>
        }
    </table>

在执行上述代码时出现错误:

可能是什么原因?我认为这应该有效。我在这里错过了什么吗?

【问题讨论】:

  • 使用强类型的 @Html.DropDownListFor() 帮助器,这样你的 html 就可以正确构建了。
  • @StephenMuecke 感谢您的工作。您能否在原始代码中指出问题。
  • 投反对票的人,你能告诉我原因吗?这不是按照stackoverflow.com/a/14569710/793784
  • 如果您使用 @:selected="selected"&lt;text&gt;selected="selected"&lt;/text&gt; 它将起作用并且使用 html 帮助器不是“解决方法”!这是正确的方法。你的代码真的很糟糕

标签: c# html asp.net-mvc-4 razor


【解决方案1】:

我认为它也可以使用条件属性:

<option value="@task.Id" selected="@(mapping.TaskId == task.Id)">

如果表达式的计算结果为 false,则 Razor 将不会输出 selected 属性。

More on conditional attributes

关于原始问题,我认为问题与 Razor 如何从 C# 块中告诉 HTML 有关。在您的代码中,您没有关闭 option 标记。您正在尝试打开它,使用代码块写入(或不写入)selected 属性,然后将其关闭。

在代码块中,Razor 需要一行代码或一个新的 HTML 标记。由于它不是 HTML 标记(无尖括号),因此它会尝试将其解释为 C#,因此是 missing ; 消息。

这就是父 @foreach(){}} 中的 &lt;tr&gt;&lt;td&gt; 标记起作用的原因:因为它们可以被解释为新的 HTML 块。

【讨论】:

  • 感谢您的回答,我得到了这个问题的多个答案,现在我正试图找出原始代码有什么问题。
  • 用我认为原始代码错误的更多信息更新了答案。
【解决方案2】:

试试这个代码

<option value="@task.Id" @(mapping.TaskId == task.Id ? "selected" : string.Empty)>

在 {} 内,您只能使用 C# 代码

【讨论】:

  • 是吗?我在父级 @foreach(){} 中使用的所有 标签怎么样。这肯定行得通!
  • 我试过你的代码,这看起来像是我应该做的。有用!我仍然想知道原始代码有什么问题。感谢您的回答!
  • 抱歉,Jacek,Anderson 的回答看起来与我更相关,所以转移标记的答案。
猜你喜欢
相关资源
最近更新 更多
热门标签