2017-10-30 3 views
0

私は入力テキストフィールドを持っており、ユーザーがテキストを編集した後に初期値を復元できるようにします。 したがって、初期値を保持するdata-{something}属性(たとえばdata-init)を追加すると、後で復元できます。MVC 5カスタムデータアノテーションで 'data-'属性を追加します。

結果は次のようになります。

<input type="text" val="Some value..." data-init="Some value..." /> 

、私は私が使用してこれを達成することができます知っている:

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

をしかし、それはひどい、と私は、この動作で入力フィールドがたくさんあります。

また、私はされるべきだと思うものを、のHtmlHelper私はこの動作で多くの入力タイプを持っているので、私はこの道を行けば、それは非常に厄介になります...

だから、カスタムを作成することはできません実際的な解決策は、データ注釈を使用することです。

public class ExampleVM 
{ 
    [HoldInitialValue] 
    public string InputText { get; set; } 
} 

[HoldInitialValue]属性は、inputタグにdata-init="{value}"を追加する責任を負うことになります。 {value}はプロパティの値から取得され、それを上書きするオプションもあります。

この動作を実装するにはどうすればよいですか?

ヘルパーに感謝します。

+0

カスタムHtmlHelperを作成します。をする方法知ってますか? –

+0

@IvayloStoev - はい、私はこの動作で多くの入力タイプを持っているため、HtmlHelperソリューションを拒否しました。このようにすれば、かなり面倒です... –

+1

このようなデータアノテーションを使用する場合は、それら。これは通常ヘルパーです。他に意味のある拡張ポイントはありません。別のオプション(実際にはMVCのやり方ではない)は、クライアント側からそれを行い、いくつかの一般的なCSSクラスに基づいて、いくつかのjavascriptコードを使用してhtml要素が初めてレンダリングされるときに初期値を追加することです。 –

答えて

1

AdditionalValuesプロパティの値をModelMetadataに追加するには、MetadataAwareを実装する必要があるカスタム属性を作成する場合でも、独自の拡張メソッドを作成してその値を読み取り、追加する必要があります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); 
0

はIDictionaryを

としてhtmlAttributesを使用して、これを試してみてください使用しての使用例については

を使用することができます

@Html.TextBoxFor(m => m.InputText , new Dictionary<string,object>() 
       { 
        { "data-init", Model.InputText} 
       }) 
関連する問題