我正在尝试将选定的属性添加到选择内的选项中,例如:<option value="item" selected>item</option>
,但在奇怪的事件中,文本selected
在渲染页面时被删除。
例如,我有以下代码:
<select
class="form-control"
name="searchCode">
<option value="0"> Nothing Selected</option>
@foreach (string str in results) {
string sel = "";
if (str.Equals(searchCode)) {
sel = "selected";
}
<option
value="@str"
@sel>
@str
</option>
}
</select>
在这个if searchCode == str
然后@sel
被设置为“选中”但问题是,当渲染网站时,不打印@sel
属性。
例如,它应该打印:
<select>
<option value="a">a</option>
<option value="b" selected>b</option>
<option value="c">c</option>
</select>
但相反它打印:
<select>
<option value="a">a</option>
<option value="b">b</option>
<option value="c">c</option>
</select>
如果我将我的代码更改为:
<select
class="form-control"
name="searchCode">
<option value="0"> Nothing Selected</option>
@foreach (string str in results) {
string sel = "";
if (str.Equals(searchCode)) {
sel = "selected";
}
<option
value="@str"
@sel>
@str - @sel
</option>
}
</select>
我会得到这样的东西:
<select>
<option value="a">a - </option>
<option value="b">b - selected</option>
<option value="c">c - </option>
</select>
因此,所选属性已正确计算,但未按预期打印。
关于发生了什么的任何想法?
它似乎是一个错误:https://github.com/aspnet/Mvc/issues/3733
我所做的是将option
改为!option
。
<select
class="form-control"
name="searchCode">
<option value="0"> Nothing Selected</option>
@foreach (string str in results) {
string sel = "";
if (str.Equals(searchCode)) {
sel = "selected";
}
<!option
value="@str"
@sel>
@str - @sel
</!option>
}
</select>
1)为搜索条件创建类
public class SearchCriteria
{
public string searchCode { get; set; }
public List<string> results { get; set; }
}
2)在绑定列表之前添加默认选项
var searchCriteriaObj = new SearchCriteria { searchCode = "bla bla bla" };
searchCriteriaObj.results = searchManager.getResults(searchCode);
searchCriteriaObj.results.Insert(0, " Nothing Selected");
3)在获得结果后通过传递它(Controller)来绑定对象。
ViewBag.criteria = searchCriteriaObject;
4)查看页面:
<select asp-for="ViewBag.criteria.searchCode"
asp-items="ViewBag.criteria.results">
</select>