MVC自定义模型注释未经验证
本文关键字:验证 注释 自定义 模型 MVC | 更新日期: 2023-09-27 18:26:13
因此,有很多制作自定义数据验证器的例子,但我需要的是一个数据注释,它只会在最终标记中添加一个属性。我的谷歌功夫今天一定很弱。基本想法是:
型号.cs
[SomeCustomAttribute]
public int CoolProperty {get;set}
查看.cshtml
@Html.EditorFor(q => q.CoolProperty)
然后,神奇的魔法随之而来:
public class SomeCustomAttribute : SomeAwesomeClassToInheritThatICantFind {
public override void AddAttributes() {
AddAttribute("CustomAttribute");
}
}
最后,我希望标记呈现为:
<input type="text" CustomAttribute>
很明显,这会更复杂,但这就是它的要点。我知道我可以把它放在一边,但我会在所有地方重复使用这个特定的逻辑,似乎应该有一些方法来做到这一点。类似于"显示"属性的内容。
如果我缺少另一种方法,我也完全支持。
这也可能是自定义HTML Helper方法的一个很好的候选者,这将允许您在应用程序的其他领域中重用它。这就是我模仿标准ActionLink
方法所做的;我的允许我指定引导程序字形类。
-
创建一个静态类来容纳您的html助手方法;我的名字叫CCD_ 2。
-
在这个类中,定义并实现一个封装所需逻辑的静态方法。我将我的方法称为BootstrapActionLink。因为这是一个扩展方法,所以第一个参数需要是
this HtmlHelper parameterName
。 -
由于您希望在应用程序的不同区域中重用,因此需要将类名称空间(步骤1)添加到位于
~/Views
文件夹中的web.config
文件中(而不是顶层web.config)。 -
现在,您可以在任何视图中使用HTML助手方法。
下面是我使用TagBuilder
类的助手方法代码:
public static MvcHtmlString BootstrapActionLink(this HtmlHelper htmlHelper, string linkText, string linkUrl, string bootstrapClasses, string glyphClasses)
{
TagBuilder anchor = new TagBuilder("a");
anchor.MergeAttribute("href", linkUrl);
anchor.AddCssClass(bootstrapClasses);
TagBuilder span = new TagBuilder("span");
span.AddCssClass(glyphClasses);
anchor.InnerHtml = linkText + " " + span.ToString();
return MvcHtmlString.Create(anchor.ToString());
}
在~/Views/Web.config
内部,我有
<system.web.webPages.razor>
...
<namespaces>
<add namespace="ApplicationName.NamespaceName"/>
在我看来,我使用以下代码
@Html.BootstrapActionLink("Add Account", @Url.Action("Add", new { employeeId = @Model.EmployeeId.Trim() }), "btn btn-primary", "glyphicon glyphicon-plus")
生成的输出如下所示:
<a class="btn btn-primary" href="/myapplication/Add/123456">Add Account <span class="glyphicon glyphicon-plus"></span></a>
您可以使用自定义编辑器模板:
1) 创建文件夹/Views/Shared/EditorTemplates
2) 在此文件夹中创建文件SomeCustomAttributes.cshtml
3) 在模板文件中,您必须指定可以应用模板的类型和规则(添加一个具有class和maxlength两个属性的@Html.TextBox):
@model int
@Html.TextBox("", (Model), new { @class = "someClass" , maxlength="5"})
4) 最后,使用UIHint属性指定自定义模板:
[UIHint("SomeCustomAttributes")]
public int CoolProperty {get;set}
您应该得到一个输入类型=text,属性class=someClass,maxlength=5