как я делаю элемент ребенком себя в XML-схеме?

Ответ на исходный вопрос

Почему я получаю эту ошибку InvalidOperationException: Could not create an instance of type 'Microsoft.AspNetCore.Mvc.Rendering.SelectList'. Model bound complex types must not be abstract or value types and must have a parameterless constructor. Alternatively, set the 'SearchOptions' property to a non-null value

Имеет атрибут BindProperty в вашем свойстве SearchOptions попытается привязать данные заголовка к вашему SelectList. Удалите атрибут BindPropery из списка выбора и создайте свойство для получения выбранного значения.

Ответ на вопрос в вашем редактировании

Теперь я получаю сообщение об ошибке NullReferenceException: Object reference not set to an instance of an object

Это потому, что "Key" должно быть "Text"

Измените SearchOptions = new SelectList(_searchoptions, "Key", "Value", "By Email");
на SearchOptions = new SelectList(_searchoptions, "Text", "Value", "By Email");

Полный код:

private List<SelectListItem> _searchoptions;

// [BindProperty(SupportsGet = true)] // Remove this here
public SelectList SearchOptions { get; set; }

// Add a property to receive your selected value
[BindProperty(SupportsGet = true)]
public string BoundSearchField { get; set; }

public TestSelectModel()
{
    _searchoptions = new List<SelectListItem>();
    _searchoptions.Add(new SelectListItem("By Email", "By Email", true));
    _searchoptions.Add(new SelectListItem("By Request Name", "By Request Name", false));
}
public void OnGet()
{
    // Change "Key" to "Text"
    SearchOptions = new SelectList(_searchoptions, "Text", "Value", "By Email");
}

Затем добавьте name="BoundSearchField" в свой .cshtml

<form>
    <div>
        <select name="BoundSearchField" asp-items="Model.SearchOptions">
            <option value="">Choose an search method</option>
        </select>
        <input type="submit" value="Filter" />
    </div>
</form>
6
задан 1 May 2009 в 16:17
поделиться

2 ответа

Лично я предпочитаю RelaxNG , а не XML-схему. Может быть, стоит потратить на это время.

0
ответ дан 17 December 2019 в 04:52
поделиться

Следующее должно сделать трюк. Со стандартом XSD довольно сложно работать напрямую, я всегда использую такой редактор, как Liquid XML Studio .

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.1.1206 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Path" type="PathType" />
  <xs:complexType name="PathType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="Path" type="PathType" />
    </xs:sequence>
    <xs:attribute name="expr" type="xs:string" use="required" />
  </xs:complexType>
</xs:schema>

alt text
(источник: liquid-technologies.com )

XSD действует. Для нового XML, который вы описали, вам нужно изменить его так, чтобы он выглядел следующим образом.

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.0.1135 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Application">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="path" type="PathType" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:complexType name="PathType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="path" type="PathType" />
    </xs:sequence>
    <xs:attribute name="expr" type="xs:string" use="required" />
  </xs:complexType>
</xs:schema>
5
ответ дан 17 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: