所以,有很多关于制作自定义数据验证器的例子,但我需要的是一个Data Annotation,它只是为最终标记添加一个属性。我的google-fu今天一定很弱。基本想法是:
Model.cs
[SomeCustomAttribute]
public int CoolProperty {get;set}
View.cshtml
@Html.EditorFor(q => q.CoolProperty)
然后,神奇的巫术在这里发生:
public class SomeCustomAttribute : SomeAwesomeClassToInheritThatICantFind {
public override void AddAttributes() {
AddAttribute("CustomAttribute");
}
}
最后,我希望标记呈现为:
<input type="text" CustomAttribute>
显然它会更复杂,但这是它的要点。我知道我可以在视图中查看它,但我将在整个地方重用这个特定的逻辑,似乎应该有一些方法来做到这一点。类似于Display属性的东西。
如果还有另一种我缺失的方法,我也是为了这一切。
答案 0 :(得分:0)
您可以使用自定义编辑器模板:
1)创建文件夹 / Views / Shared / EditorTemplates
2)在此文件夹中创建文件 SomeCustomAttributes.cshtml
3)在模板文件中,您必须指定可以应用模板的类型和规则(添加具有两个属性,类和maxlength的@ Html.TextBox):
@model int
@Html.TextBox("", (Model), new { @class = "someClass" , maxlength="5"})
4)最后,使用 UIHint 属性指定自定义模板:
[UIHint("SomeCustomAttributes")]
public int CoolProperty {get;set}
你应该得到一个输入类型=文本,其属性为 class = someClass和maxlength = 5
答案 1 :(得分:0)
这也可能是自定义HTML Helper方法的理想选择 - 这将允许您在应用程序的其他区域重用它。这就是我模仿标准ActionLink
方法的做法;我允许我指定bootstrap glyphicon类。
创建一个静态类来保存你的html帮助器方法;我的名字叫HtmlHelpers
。
在此类中,定义并实现一个封装所需逻辑的静态方法。我调用了我的方法BootstrapActionLink。由于这是一种扩展方法,因此第一个参数必须为this HtmlHelper parameterName
。
由于您希望在应用程序的不同区域重用,因此您需要将类命名空间(步骤1)添加到位于web.config
文件夹中的~/Views
文件中(不顶级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>