gpt4 book ai didi

asp.net-core - 在 ASP.NET Core MVC 中使用 Tag Helpers 有什么好处

转载 作者:行者123 更新时间:2023-12-03 08:54:11 28 4
gpt4 key购买 nike

我刚刚看到一篇关于 ASP.NET Core 新特性的好文章,名为 Tag helpers .

从那里,我了解到可以替换以下代码:

@model MyProject.Models.Product

@using (Html.BeginForm())
{
<div>
@Html.LabelFor(m => p.Name, "Name:")
@Html.TextBoxFor(m => p.Name)
</div>
<input type="submit" value="Create" />
}

和:
@model MyProject.Models.Product
@addtaghelper "Microsoft.AspNet.Mvc.TagHelpers"

<form asp-controller="Products" asp-action="Create" method="post">
<div>
<label asp-for="Name">Name:</label>
<input asp-for="Name" />
</div>

<input type="submit" value="Save" />
</form>

有一些新语法,例如 asp-controller , asp-for等等。但是它有什么作用呢?这种新方法的优势是什么?

最佳答案

到目前为止,我看到的最重要的改进是它保证了对 HTML 元素的控制。虽然方便,但 MVC 使用的 Html 帮助器在您尝试做它们不是为它们构建的事情时会产生问题。

在 MVC5 中使用 TextBox 时可以看到一个简单的例子:

 @Html.TextBoxFor(m => p.Name)

生成的 HTML 标记如下所示:
<input class="form-control" id="Name" name="Name" type="text" value="">

很好很简单。但是如果你想添加一个占位符属性呢?如果你想使用 Bootstrap 的验证状态怎么办?如果您有一些需要自定义属性的第三方超酷 javascript 库怎么办。这些事情在 中都不可能发生。初始版本 MVC5。 尽管它们最终是通过更新以 的形式添加的html属性 .即使现在添加自定义属性充其量也是杂乱无章的。
@Html.TextBoxFor(m => p.Name, 
new {@class="form-control has-error", placeholder="Enter Name",
superCoolFeature="Do something cool"})

虽然您可能会争辩说这仍然比纯 HTML 更少的代码,但它不再是一个显着的优势。更糟糕的是,这个解决方案仍然没有涵盖相当常见的属性中的破折号。如果您需要它们,您会遇到诸如 ActionLink htmlAttributes 之类的解决方法。

我已经使用自定义编辑器修复了这些缺陷,并尝试构建自己的 TextBox 控件。很快就很明显,替换包含的 TextBox 模板需要大量工作。更糟糕的是,您的模板必须了解您添加的任何扩展才能使用它们。

似乎将 Bootstrap 和其他 3rd 方工具包含到 MVC 中,更明显地表明当前设计存在扩展 HTML 的问题,需要修复。希望标签助手的实现足够完整,我们将来可以避免它们。

关于asp.net-core - 在 ASP.NET Core MVC 中使用 Tag Helpers 有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005877/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com