我正在尝试使用条件属性构建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!='%'或者'货币'。
答案 0 :(得分:4)
Html.TextboxFor将IDictionary作为参数来填充文本框的html属性。
您应该创建一个字典,其中包含根据您的逻辑填充的所有属性,然后将该字典传递给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 :(得分:1)
后一种方法是你应该怎么做,但你想从三元而不是空字符串返回null
,即:
data_fomula = (question.CALC_EXPRESSION.Trim() != "" ? question.CALC_EXPRESSION : null),
生成的HTML中不包含null属性。
答案 2 :(得分:0)
我想做的是将一个对象从viewModel
传递到视图,然后获取它们,并轻松地if
选择我需要的对象:
查看模型:
public string FormRoot;
public string form()
{
if (FormRoot == "Edit")
{
return ("1");
}
else if(FormRoot == "Details")
{
return ("2");
}
return ("No valido");
}
控制器:
var viewModel = new SubCategoryViewModel()
{
SubCategory = subCategory,
Categories = await _context.Categories.ToListAsync(),
FormRoot = style //Style is the info sent to the method
};
查看:
@Html.TextBoxFor(m => m.SubCategory.Name, "", new {@class = "form-control", @disabled = Model.FormRoot.ToString() == "Edit" ? "false" : "true" })
动态类正在运行,但是在这种情况下,即使类似于"disabled="false"
,页面中的textBox也保持禁用状态。