我有一个输入文本字段,我希望能够在用户编辑文本后恢复初始值。
所以,我想说添加一个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}将取自属性的值,还有一个覆盖它的选项。
那么,我该如何实现这种行为?
感谢帮助者。
答案 0 :(得分:1)
即使你要创建一个自定义属性,需要实现MetadataAware才能将值添加到ModelMetadata的AdditionalValues
属性,你仍然需要创建您自己的扩展方法,以读取该值并将其添加到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}
})