MVC 5添加数据 - '自定义数据注释的属性

时间:2017-10-30 14:59:59

标签: asp.net-mvc asp.net-mvc-5 metadata data-annotations

我有一个输入文本字段,我希望能够在用户编辑文本后恢复初始值。 所以,我想说添加一个data-init属性,例如<input type="text" val="Some value..." data-init="Some value..." /> ,它将保存初始值,以便稍后恢复。

结果应如下所示:

@Html.TextBoxFor(m => m.InputText , new { data_init = Model.InputText })

现在,我知道我可以通过使用:

实现这一目标
public class ExampleVM
{
    [HoldInitialValue]
    public string InputText { get; set; }
}

但它太糟糕了,我有很多输入字段都有这种行为。

另外,我无法创建自定义 HtmlHelper ,因为我有很多具有此行为的输入类型,如果我这样做会非常混乱......

所以,我认为应该是实用的解决方案是使用数据注释

[HoldInitialValue]

data-init="{value}"属性负责将myValue = InputBox("Give me some input", "Hi", 1) 添加到输入标记。 {value}将取自属性的值,还有一个覆盖它的选项。

那么,我该如何实现这种行为?

感谢帮助者。

2 个答案:

答案 0 :(得分:1)

即使你要创建一个自定义属性,需要实现MetadataAware才能将值添加到ModelMetadataAdditionalValues属性,你仍然需要创建您自己的扩展方法,以读取该值并将其添加到htmlAttributes

有关如何实现它的示例,请参阅CustomAttribute reflects html attribute MVC5

但是,这是不必要的,因为HTML输入已经存储了初始值。对于<input>(复选框除外)或<textarea>defaultValue。对于<input type="checkbox" /> defaultChecked<select> defaultSelected

因此,对于@Html.TextBoxFor(m => m.InputText),您可以使用例如

使用javascript

var element = document.getElementById ("InputText");
var initialValue = elem.defaultValue;
// reset to initial value
element.value = initialValue;

或使用jQuery

var element = $('#InputText');
var initialValue = element.prop('defaultValue');
// reset to initial value
element.val(initialValue);

答案 1 :(得分:0)

尝试使用htmlAttributes作为IDictionary

@Html.TextBoxFor(m => m.InputText , new Dictionary<string,object>()
               {
                   { "data-init", Model.InputText}
               })