在asp.net-core-mvc上使用Razor在HTML上删除选项中选择的属性

问题描述 投票:2回答:2

我正在尝试将选定的属性添加到选择内的选项中,例如:<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>

因此,所选属性已正确计算,但未按预期打印。

关于发生了什么的任何想法?

asp.net-mvc razor asp.net-core-mvc
2个回答
1
投票

它似乎是一个错误: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>

0
投票

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>
© www.soinside.com 2019 - 2024. All rights reserved.