因为EditForm组件呈现标准的<form>HTML元素,所以实际上可以在我们的标记中使用标准的HTML表单元素,如<input><select>,但与EditForm组件一样,我建议使用各种Blazor输入控件,因为它们附带验证等附加功能。
Blazor中提供了一个标准的输入组件集合,所有这些组件都是从基类InputBase<T>派生出来的。
image.png
以下各节都将使用以下类进行绑定:

  1. @code
  2. {
  3. SomeModel FormData = new SomeModel();
  4. class SomeModel
  5. {
  6. public bool SomeBooleanProperty { get; set; }
  7. public DateTime? SomeDateTimeProperty { get; set; }
  8. public int SomeIntegerProperty { get; set; }
  9. public decimal SomeDecimalProperty { get; set; }
  10. public string SomeStringProperty { get; set; }
  11. public string SomeMultiLineStringProperty { get; set; }
  12. public SomeStateEnum SomeSelectProperty { get; set; } = SomeStateEnum.Active;
  13. }
  14. public enum SomeStateEnum
  15. {
  16. Pending,
  17. Active,
  18. Suspended
  19. }
  20. }

注意:可以为以下任何组件指定其他属性。Blazor没有明确识别的任何内容都将直接呈现到目标HTML元素上。

InputCheckbox

InputCheckbox组件将布尔属性绑定到type="checkbox"HTML<input>元素。此组件不允许绑定到可为Null的属性。

  1. <InputCheckbox @bind-Value=FormData.SomeBooleanProperty />

InputDate

InputDate组件将DateTime属性绑定到type="date"的HTML<input>元素。此组件将绑定到可为空的属性,但是,并非所有浏览器都提供在此类型的输入元素上指定空值的功能。

  1. <InputDate @bind-Value=FormData.SomeDateTimeProperty ParsingErrorMessage="Must be a date" />

InputNumber

InputNumber组件将任何类型的C#数字属性绑定到type="number"的HTML<input>元素。
如果无法将输入的值解析为目标属性类型,则输入将被视为无效(请参见表单验证),并且不会使用该值更新模型。
target属性可为空时,无效输入将被视为空,并且输入中的文本将被清除。

  1. <InputNumber @bind-Value=FormData.SomeIntegerProperty ParsingErrorMessage="Must be an integer value" />
  2. <InputNumber @bind-Value=FormData.SomeDecimalProperty ParsingErrorMessage="Must be a decimal value" />

InputText

InputText组件将字符串属性绑定到未指定类型的HTML<input>元素。这使我们能够指定任何可用的输入类型,如密码、颜色或W3标准中指定的其他选项之一。

  1. <InputTextArea @bind-Value=FormData.SomeMultiLineStringProperty />

InputSelect

InputSelect组件将任何类型的属性绑定到HTML<select>元素。Blazor将根据属性的值自动选择正确的<option>

  1. <InputSelect @bind-Value=FormData.SomeSelectProperty>
  2. <option value="Pending">Pending</option>
  3. <option value="Active">Active</option>
  4. <option value="Suspended">Suspended</option>
  5. </InputSelect>

由于razor视图将FormData.SomeSelectProperty默认为SomeStateEnum.Active,因此<select>HTML元素将其选择默认为该值,即使它不是第一个指定的<option>