2017-02-27 12 views
0

私は条件付きの属性を持つTextBoxForを構築しようとしています。HTML.TextBoxForの動的属性

Model.questionにCALC_EXPRESSIONが設定されていない場合は、データ式属性を表示する必要はありません。

これは可能ですか?これは動作しません:

@Html.TextBoxFor(q => question.AnswerFloatString, 
    new 
    { 
     Value = "", 
     id = String.Concat("Percent_of_Funding_", i.ToString()), 
     Name = "QuestionBasicSection.Questions[" + question.Index+ "].AnswerFloatString", 
     @class = "form-control percentMask", 
     data_bind = "textInput: sdto.DATE_INACTIVE", 
     data_pattern = question.FORMAT_VALIDATION, 
     data_cell = "F" + (15 + i).ToString(), 
     data_format = (question.FORMAT_VALIDATION == "pecent" ? "0.00%" : (question.FORMAT_VALIDATION == "currency" ? "$0,0.00" : "")), 
     (question.CALC_EXPRESSION.Trim() != "" ? data_fomula = question.CALC_EXPRESSION:""), 
     @readonly = "readonly", 
     tabindex = "-1" 
    }) 

をしかし、私はやる場合は、この:

data_fomula = (question.CALC_EXPRESSION.Trim() != "" ? question.CALC_EXPRESSION:""), 

私が取得し、HTML内の空の属性やモデルにはCALC_EXPRESSIONがない場合、私は「オブジェクト参照を取得設定されていません。 質問:FORMAT_VALIDATION!= 'パーセント'または '通貨'の場合は、データフォーマット属性を持たなくても構いません。すなわち、

答えて

2

Html.TextboxForは、テキストボックスのhtml属性を設定するパラメータとしてIDictionaryをとります。

https://msdn.microsoft.com/en-us/library/system.web.mvc.html.inputextensions.textboxfor(v=vs.118).aspx

あなたはあなたのロジックに基づいて、すべての属性が取り込まで辞書を作成してtextboxforメソッドにその辞書を渡す必要があります。

このようにして、どの属性がどの値に存在するかどうかをより適切に制御できます。

var attributes = new Dictionary<string,object>(); 

attributes.Add ("id", String.Concat("Percent_of_Funding_", i.ToString())); 
// and so on.... keep adding the attributes based on the logic. 
//Have an if block for adding certain attribute only if certain condition is met. 
//That way you will not have the unnecessary attributes. 
@Html.TextBoxFor(q => question.AnswerFloatString, attributes) 
1

後者のアプローチは、あなたがそれを行う必要があります方法ですが、あなたは三ではなく、空の文字列からnullを返すようにしたい。:nullの

data_fomula = (question.CALC_EXPRESSION.Trim() != "" ? question.CALC_EXPRESSION : null), 

属性は、生成されたHTMLに含まれていません。