在foreach循环中的第一个对象上以不同方式设置RouteValueDictionary html属性
本文关键字:方式 设置 RouteValueDictionary 属性 html 循环 foreach 一个对象 | 更新日期: 2023-09-27 18:19:50
我有一个相当大的方法,它从根本上基于枚举返回单选按钮。
foreach (var name in names)
{
//other stuff
var id = string.Format(
"{0}_{1}_{2}",
htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix,
metaData.PropertyName,
name
);
var attribs = new RouteValueDictionary(htmlAttributes) { { "id", id }, { "checked", true } }; //<- I want this to be true on first, false on everything after
var radio = htmlHelper.RadioButtonFor(expression, name, attribs).ToHtmlString();
var field = fields.Single(f => f.Name == name);
//more stuff
}
在我进入循环之前,我正在按一定的顺序排列我的数组names
,该顺序规定,当最终呈现到我的页面时,应该检查第一个单选按钮,这就是我正在努力解决的问题,因为它正在检查for each
中的每一个项目,导致最后一个要检查的项目是剩下的那个。
我试着添加了一些类似的内容:
bool firstRadioButton = true;
然而,当我开始将它们放在if statements
内部时,我失去了对attribs
等的引用,并且如果没有它们在if statements
外部所需的参数,我似乎无法声明它们。
有人能提出一种方法吗?我只能在foreach
的第一次通过时将attribs
的checked设置为true
?
目前尚不清楚您使用firstRadioButton
做了什么,但类似的操作应该可以:
bool firstRadioButton = true;
foreach (var name in names)
{
// ....
RouteValueDictionary attribs = null;
if (firstRadioButton)
{
attribs = new RouteValueDictionary(htmlAttributes) { { "id", id }, { "checked", true } }; //<- I want this to be true on first, false on everything after
firstRadioButton = false;
}
else
{
attribs = new RouteValueDictionary(htmlAttributes) { { "id", id }};
}
// ...
}
使用foreach
循环for
。
for (int i = 0; i < names.length; i++)
{
var name = names[i];
var id = string.Format(
"{0}_{1}_{2}",
htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix,
metaData.PropertyName,
name
);
var attribs = new RouteValueDictionary(htmlAttributes) { { "id", id }, { "checked", i == 0 ? true : false} };
var radio = htmlHelper.RadioButtonFor(expression, name, attribs).ToHtmlString();
var field = fields.Single(f => f.Name == name);
}
或者在foreach
中,您可以进行
bool isFirst = true;
foreach (var name in names)
{
var id = string.Format(
"{0}_{1}_{2}",
htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix,
metaData.PropertyName,
name
);
var attribs = new RouteValueDictionary(htmlAttributes) { { "id", id }, { "checked", isFirst} };
var radio = htmlHelper.RadioButtonFor(expression, name, attribs).ToHtmlString();
var field = fields.Single(f => f.Name == name);
if(isFirst)
{
isFirst = false;
}
}