
EditorForm
Edit forms are automatically rendered through the bound data model
EditorForm
component is a very useful component that, when editing data, simply assigns the Model
property.
- The binding model automatically generates all properties by default, and you can change to not automatically build by setting
AutoGenerateAllItem
- If you don't need to edit the columns, set the
Editable
, the default istrue
build editing components - Complex edit columns, set up
EditTemplate
templates, and edit custom components - The buttons in the form can be set up multiplely, just set the buttons
Buttons
template
By binding TModel
data model, editable forms for individual fields of the model are automatically generated
Demo
Directly bind the model model
, setting the Educationcompletefield not to appear
Data compliance checks are implemented through nested ValidateForm
components
Demo
The component is built into the ValidateForm
to turn on data compliance checks, and hobbyfields use the EditTemplate
template to customize the component to render the data
Make the birthday
field read-only by setting the Readonly
property
By setting the property AutoGenerateAllItem
value of false
the property is prohibited from being automatically generated, and the display property is controlled by setting the FieldItems
internal collection
Demo
In this example, by setting the autoGenerate AllItem
value to false
, turning off auto-generation, and rendering the form editing by manually adding two EditoItem
edits
By setting the property AutoGenerateAllItem
value of false
the property is prohibited from being automatically generated, and the display property is controlled by setting the FieldItems
internal collection
Demo
In some cases, the value of some columns in the form may be a secondary classification, etc., and you need to know the information for a level 1 classification, at which point the first-level classification requires additional components to render if Select
, which is independent of the current context binding model Model
, which requires that you set the SkipValidate
value to true
, turn off model validation for this component
Control the layout by setting the property values ItemsPerRow
Demo
This example sets ItemsPerRow=3
show 3 components per row
Control the rendering component type by setting the CompnentType
property values
Demo
inline
layout mode aligns the labels in the form right by setting theLabelAlign="Alignment.Right"
Buttons
template you can nestdiv
and styletext-end
align the right side of the button
Attributes
EditorItem Attribute
@page "/editorforms"
@inject IStringLocalizer<EditorForms> Localizer
<h3>EditorForm</h3>
<h4>Edit forms are automatically rendered through the bound data model</h4>
<p><code>EditorForm</code> component is a very useful component that, when editing data, simply assigns the <code>Model</code> property.</p>
<ul class="ul-demo">
<li>The binding model automatically generates all properties by default, and you can change to not automatically build by setting <code>AutoGenerateAllItem</code></li>
<li>If you don't need to edit the columns, set the <code>Editable</code>, the default is <code>true</code> build editing components</li>
<li>Complex edit columns, set up <code>EditTemplate</code> templates, and edit custom components</li>
<li>The buttons in the form can be set up multiplely, just set the buttons <code>Buttons</code> template</li>
</ul>
<DemoBlock Title="Basic usage" Introduction="By binding <code>TModel</code> data model, editable forms for individual fields of the model are automatically generated" Name="Normal" Demo="typeof(Demos.EditForm.EditFormNormal)">
<p>Directly bind the model <code>model</code>, setting the <b>Education</b><b>complete</b>field not to appear</p>
</DemoBlock>
<DemoBlock Title="Turn on data validation" Introduction="Data compliance checks are implemented through nested <code>ValidateForm</code> components" Name="ValidateForm" Demo="typeof(Demos.EditForm.EditFormValidateForm)">
<p>The component is built into the <code>ValidateForm</code> to turn on data compliance checks, and <b>hobby</b>fields use the <code>EditTemplate</code> template to customize the component to render the data</p>
<p>Make the <code>birthday</code> field read-only by setting the <code>Readonly</code> property</p>
</DemoBlock>
<DemoBlock Title="It is not automatically generated by default" Introduction="By setting the property <code>AutoGenerateAllItem</code> value of <code>false</code> the property is prohibited from being automatically generated, and the display property is controlled by setting the <code>FieldItems</code> internal collection" Name="AutoGenerate" Demo="typeof(Demos.EditForm.EditFormAutoGenerate)" />
<DemoBlock Title="The components within the form component bind fields that are not model-independent" Introduction="By setting the property <code>AutoGenerateAllItem</code> value of <code>false</code> the property is prohibited from being automatically generated, and the display property is controlled by setting the <code>FieldItems</code> internal collection" Name="SkipValidate" Demo="typeof(Demos.EditForm.EditFormSkipValidate)" />
<DemoBlock Title="Set the number of controls displayed per row" Introduction="Control the layout by setting the property values <code></code>ItemsPerRow" Name="ItemsPerRow" Demo="typeof(Demos.EditForm.EditFormItemsPerRow)">
<p>This example sets <code>ItemsPerRow=3</code> show 3 components per row</p>
</DemoBlock>
<DemoBlock Title="Custom rendering component types" Introduction="Control the rendering component type by setting the <code>CompnentType</code> property values" Name="Alignment" Demo="typeof(Demos.EditForm.EditFormAlignment)">
<ul class="ul-demo mb-3">
<li><code>inline</code> layout mode aligns the labels in the form right by setting the <code>LabelAlign="Alignment.Right"</code></li>
<li><code>Buttons</code> template you can nest <code>div</code> and style <code>text-end</code> align the right side of the button</li>
</ul>
</DemoBlock>
<AttributeTable Items="@GetAttributes()" />
<AttributeTable Title="EditorItem Attribute" Items="@GetEditorItemAttributes()" />
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// Website: https://www.blazor.zone or https://argozhang.github.io/
namespace BootstrapBlazor.Shared.Samples;
/// <summary>
/// EditorForms
/// </summary>
public sealed partial class EditorForms
{
private IEnumerable<AttributeItem> GetAttributes() => new AttributeItem[]
{
// TODO: 移动到数据库中
new AttributeItem() {
Name = "Model",
Description = Localizer["Att1"],
Type = "TModel",
ValueList = " — ",
DefaultValue = " — "
},
new AttributeItem() {
Name = "FieldItems",
Description = Localizer["Att2"],
Type = "RenderFragment<TModel>",
ValueList = " — ",
DefaultValue = " — "
},
new AttributeItem() {
Name = "Buttons",
Description = Localizer["Att3"],
Type = "RenderFragment",
ValueList = " — ",
DefaultValue = " — "
},
new AttributeItem() {
Name = nameof(EditorForm<Foo>.IsDisplay),
Description = Localizer["IsDisplay"],
Type = "bool",
ValueList = "true/false",
DefaultValue = "false"
},
new AttributeItem() {
Name = "ShowLabel",
Description = Localizer["Att4"],
Type = "bool",
ValueList = "true/false",
DefaultValue = "true"
},
new AttributeItem() {
Name = "ShowLabelTooltip",
Description = Localizer["ShowLabelTooltip"],
Type = "bool?",
ValueList = "true/false/null",
DefaultValue = "null"
},
new AttributeItem() {
Name = "AutoGenerateAllItem",
Description = Localizer["Att5"],
Type = "bool",
ValueList = "true/false",
DefaultValue = "true"
},
new AttributeItem() {
Name = "ItemsPerRow",
Description = Localizer["Att6"],
Type = "int?",
ValueList = " — ",
DefaultValue = " — "
},
new AttributeItem() {
Name = "RowType",
Description = Localizer["Att7"],
Type = "RowType",
ValueList = "Row|Inline",
DefaultValue = "Row"
},
new AttributeItem() {
Name = "LabelAlign",
Description = Localizer["Att8"],
Type = "Alignment",
ValueList = "None|Left|Center|Right",
DefaultValue = "None"
}
};
private IEnumerable<AttributeItem> GetEditorItemAttributes() => new AttributeItem[]
{
// TODO: 移动到数据库中
new AttributeItem() {
Name = "Field",
Description = Localizer["Att9"],
Type = "TValue",
ValueList = " — ",
DefaultValue = " — "
},
new AttributeItem() {
Name = "FieldType",
Description = Localizer["Att10"],
Type = "Type",
ValueList = " — ",
DefaultValue = " — "
},
new AttributeItem() {
Name = "Editable",
Description = Localizer["Att11"],
Type = "bool",
ValueList = "true/false",
DefaultValue = "true"
},
new AttributeItem() {
Name = "Readonly",
Description = Localizer["Att12"],
Type = "bool",
ValueList = "true/false",
DefaultValue = "false"
},
new AttributeItem() {
Name = "Text",
Description = Localizer["Att13"],
Type = "string",
ValueList = " — ",
DefaultValue = " — "
},
new AttributeItem() {
Name = "EditTemplate",
Description = Localizer["Att14"],
Type = "RenderFragment<object>",
ValueList = " — ",
DefaultValue = " — "
}
};
}