我正在使用ASP.NET MVC 6中的新帮助标记。
<form asp-area="DAS"
asp-controller="Report"
asp-action="Add"
asp-route-id="@Model.id"
asp-route-incBalance="@Model.incBalance"
asp-route-dateSet="@Model.dataStart.ToString("yyyy-MM-dd")"
asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
method="post" role="form">
</form>我想要路由属性:
asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"只有在下列情况下才适用:
{
if (Model.incBalance == 0)
{
asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
}
}因此,我想得到这样的东西:
<form asp-area="DAS"
asp-controller="Report"
asp-action="Add"
asp-route-id="@Model.id"
asp-route-incBalance="@Model.incBalance"
asp-route-dateSet="@Model.dataStart.ToString("yyyy-MM-dd")"
{
if (Model.incBalance == 0)
{
asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
}
}
method="post" role="form">
</form>我知道这些错误:
TagHelper属性必须是格式良好的. if (Model.incBalance == 0)
和
标记助手'form‘不能在元素的属性声明区域中有C#。 asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")“
我正在使用2015更新1
更新1:我也尝试了这个选项:
@(Model.incBalance == 0 ? "asp-route-dateNext=" + Model.dataEnd.ToString("yyyy-MM-dd") : string.Empty)但错误仍然存在:
标记助手'form‘不能在元素的属性声明区域中有C#。 @(Model.incBalance == 0?“asp-yyyy dateNext=”+Model.dataEnd.ToString(“yyyy”):string.Empty)
发布于 2016-03-30 08:54:00
使用Razor,标记的每个部分都必须形成良好的格式。您不能有悬挂的开始标记,或中断标记的Razor表示。因此,这样的事情是无效的,因此会导致语法错误:
<!-- Interrupting a tag -->
<div
@if (condition) {
attribute="bar"
}
>
<!-- Also not possible: Conditionally opening tags -->
if (condition) {
<span>
}
Some text
if (condition) {
</span>
}因此,您必须确保Razor表达式中的标记(基本上是大括号之间的所有内容)都是有效的表达式,并且标记总是完整的。
不幸的是,这意味着您不能使用@if有条件地添加属性(不管它是否是标记助手属性)。
如果它只是普通的HTML,您可以使Razor呈现原始文本,Razor解析器不会解释它,因此不需要是有效的标记(所以上面的东西可以工作)。但是,在原始文本中,标记帮助程序也不会运行,所以这对您没有帮助。
从本质上说,这给你留下了三个选择:
@if中,并在本质上复制整个form标记:
@if (条件){所有表单内容}if{所有表单内容}
当然,这很糟糕,因为您需要复制整个表单内容(否则,@if中的标记就不会有良好的格式)。@if条件检查背后的逻辑。
这对于更一般的事情来说很好,但是对于添加一个可选属性来说有点乏味。发布于 2020-06-08 12:39:28
我现在正在从mvc迁移到aspnet核心3.0,并得到了同样的错误。由于我没有使用任何标记帮助器特性,所以我只需通过注释_viewimports中的行来删除标签导入指令:
@*@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers*@现在,意见呈现得很愉快。
https://stackoverflow.com/questions/36303233
复制相似问题