using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace Dpz.Core.Public.ViewModel.DynamicPages;
/// <summary>
/// 自定义页
/// </summary>
public class VmCreateDynamicPage
{
/// <summary>
/// HTML 内容
/// </summary>
[Required]
public HtmlContent? HtmlContent { get; set; }
/// <summary>
/// 样式 内容
/// </summary>
[XmlIgnore]
public SortedDictionary<int, StyleContent> StyleContents { get; set; } = [];
/// <summary>
/// Gets or sets SerializableStyleContents.
/// </summary>
[XmlArray(ElementName = "StyleContents")]
[XmlArrayItem(ElementName = "StyleContent")]
[JsonIgnore]
public KeyValueElement[] SerializableStyleContents =>
StyleContents.Select(x => new KeyValueElement(x.Key, x.Value)).ToArray();
/// <summary>
/// 脚本 内容
/// </summary>
[XmlIgnore]
public SortedDictionary<int, ScriptContent> ScriptContents { get; set; } = [];
/// <summary>
/// Gets or sets SerializableScriptContents.
/// </summary>
[XmlArray(ElementName = "ScriptContents")]
[XmlArrayItem(ElementName = "ScriptContent")]
[JsonIgnore]
public KeyValueElement[] SerializableScriptContents =>
ScriptContents.Select(x => new KeyValueElement(x.Key, x.Value)).ToArray();
/// <summary>
/// 创建人
/// </summary>
[BindNever, JsonIgnore, XmlIgnore]
public VmUserInfo? Creator { get; set; }
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这个代码文件定义了一个用于创建动态页面的视图模型类 VmCreateDynamicPage。让我详细解释一下这个类的结构和功能:
类的用途
这是一个用于创建自定义动态页面的视图模型(ViewModel),主要用于Web应用程序中处理动态页面的创建请求。
主要属性分析
1. HtmlContent(HTML内容)
[Required]
public HtmlContent? HtmlContent { get; set; }
- 使用
[Required]特性标记为必填字段 - 存储页面的HTML内容
2. StyleContents(样式内容)
[XmlIgnore]
public SortedDictionary<int, StyleContent> StyleContents { get; set; } = [];
- 使用
SortedDictionary存储样式内容,键为整数(可能是优先级或序号) [XmlIgnore]表示在XML序列化时忽略此属性
3. SerializableStyleContents(可序列化的样式内容)
[XmlArray(ElementName = "StyleContents")]
[XmlArrayItem(ElementName = "StyleContent")]
[JsonIgnore]
public KeyValueElement[] SerializableStyleContents =>
StyleContents.Select(x => new KeyValueElement(x.Key, x.Value)).ToArray();
- 这是一个只读属性,将
StyleContents转换为可XML序列化的格式 [JsonIgnore]表示在JSON序列化时忽略- 用于XML序列化支持
4. ScriptContents(脚本内容)
[XmlIgnore]
public SortedDictionary<int, ScriptContent> ScriptContents { get; set; } = [];
- 与样式内容类似,存储JavaScript脚本内容
- 同样使用排序字典来维护执行顺序
5. SerializableScriptContents(可序列化的脚本内容)
[XmlArray(ElementName = "ScriptContents")]
[XmlArrayItem(ElementName = "ScriptContent")]
[JsonIgnore]
public KeyValueElement[] SerializableScriptContents =>
ScriptContents.Select(x => new KeyValueElement(x.Key, x.Value)).ToArray();
- 脚本内容的XML序列化版本
6. Creator(创建人)
[BindNever, JsonIgnore, XmlIgnore]
public VmUserInfo? Creator { get; set; }
- 存储页面创建者信息
[BindNever]防止模型绑定时自动赋值- 同时忽略JSON和XML序列化
设计特点
- 序列化支持:同时支持JSON和XML序列化,通过不同的属性来处理
- 数据验证:使用 DataAnnotations 进行输入验证
- 安全性:创建者信息不参与序列化和模型绑定,防止客户端篡改
- 有序存储:使用
SortedDictionary确保样式和脚本按顺序执行 - 灵活性:支持多个样式和脚本内容,可以组合构建复杂页面
这个类很好地体现了Web开发中视图模型的设计模式,既满足了业务需求,又考虑了安全性和可维护性。
评论加载中...