如何以从数据库检索到的特定顺序显示表单项
本文关键字:定顺序 显示 表单 数据库 检索 | 更新日期: 2023-09-27 18:16:36
我的客户想要一个必须包含以下项目的表单:
- <
- 名称/gh>
- <
- 地址/gh>
在这个应用程序的管理面板上,他想设置管理面板上表单项的顺序。解决这个问题的最佳方法是什么?我想为每个字段保持正确的验证。
我正在考虑一个数组,其中包含表单项的顺序,但我不知道如何以该顺序显示表单项。
排序顺序需要在数据库中设置。
首先,您必须创建一个数据库表TextBoxes
来保存设置(也将从管理面板修改),其中包含以下列:
CREATE TABLE TextBoxes
(
Id int NOT NULL PRIMARY KEY,
Ordinal int NOT NULL,
TextBoxName nvarchar(255) NOT NULL
);
通过使用TextBoxName
值(如name
, address
, state
等)向其添加一些记录-这将在稍后用于映射UI控件-以及Ordinal
列中的所需顺序。将表添加到模型中。
创建以下类(我假设包含问题中属性的实体名为Contact
):
public class MyDataAnnotationsModelMetadataProvider :
System.Web.Mvc.DataAnnotationsModelMetadataProvider
{
protected override System.Web.Mvc.ModelMetadata
CreateMetadata(IEnumerable<Attribute> attributes,
Type containerType,
Func<object> modelAccessor,
Type modelType,
string propertyName)
{
if (containerType == typeof(Contact))
{
// get the repository instance
var db = new MyModelEntities();
// find the current textbox by it's property name
var textBox = db.TextBoxes
.FirstOrDefault(t => t.TextBoxName == propertyName);
if (!string.IsNullOrWhiteSpace(propertyName) && textBox != null)
attributes = attributes.Union(new List<Attribute>() {
new DisplayAttribute() { Order = textBox.Ordinal }
});
}
return base.CreateMetadata(attributes,
containerType,
modelAccessor,
modelType,
propertyName);
}
}
在Global.asax.cs文件中修改Application_Start
方法:
protected void Application_Start()
{
// set the current metadata provider to our custom class
ModelMetadataProviders.Current = new MyDataAnnotationsModelMetadataProvider();
// other method content
AreaRegistration.RegisterAllAreas();
// etc
}
注意:上面的示例将允许您动态地更改一个模型的文本框的顺序,但是如果您在TextBoxes
模型中添加另一个属性来保持多个模型的属性顺序,那么您可以通过一些额外的过滤将逻辑扩展到其他模型。
一种选择是在客户端订购。
完成此操作的步骤:
- 在某种程度上,您必须将每个表单字段与各自的订单号相关联。以一种您可以识别每个字段的顺序的方式形成HTML。
- 实现javascript逻辑来处理HTML并按正确顺序显示字段。
一个例子:
假设每个表单字段都在一个div上,具有共同的标识符和订单号:
<div id="official_div">
</div>
<div style="display:none">
<div id="form_field_2">
<--! Name Field here -->
</div>
<div id="form_field_1">
<--! Email Field here -->
</div>
<div id="form_field_3">
<--! Address Field here -->
</div>
</div>
现在,知道了字段的数量,您可以实现一些javascript逻辑,以适当的顺序将这些字段放在一起,并将它们放在实际的表单字段官方div:
var officialDiv = document.getElementById('official_div');
for(var i =1; i <= numberOfFields; i++)
{
var element = document.getElementById('form_field_' + i);
//include element inside officialDiv
}
相关文章:
- 在数据网格视图中更新数据时,组合框数据源绑定不显示文本
- 数据源已填充,列表视图绑定但显示空数据模板
- 按字母顺序显示的下拉列表数据项
- 在数据透视项中,ListBox绑定不显示值
- Linq先按特定数字排序,然后按顺序显示所有其余部分
- 循环通过infopath 2010重复部分,并使用C#以相反的顺序显示数据
- 多个数组列表按顺序显示重复的subjectname
- 如何以与多线程web应用程序中的查询结果相同的顺序显示查询结果
- 按字母顺序显示列表框中显示的内容
- WPF中的TextBlock绑定以显示链接
- 在页面加载时以不同的顺序显示html链接
- 组合框选择的项绑定没有显示初始值,然后工作正常
- 按等级顺序显示文本文件中的行
- WPF 列表框绑定未显示
- 绑定以显示程序集名称
- 在GridView中默认以特定的显示顺序显示列
- Html Node没有按照正确的顺序显示
- 如何以从数据库检索到的特定顺序显示表单项
- 使用LINQ按层次顺序显示数据
- 按顺序显示日期,而不考虑其所在的文化偏好