说明
Value 存的是 Markdown 源码而非 HTML,落库、比对、二次编辑都按纯文本处理。预览交给框架内的 MarkdownRenderer 纯托管解析(先整体转义再替换标记,javascript: 之类可执行协议与危险的 data: 一律拦下),前端不引第三方 Markdown 库。View 取 edit / split / preview,右上角另有全屏。工具栏改写选区、Ctrl+B / Ctrl+I / Ctrl+K、列表回车续写与 Tab 缩进都由 known.editor 在 DOM 上完成,改完补发一次原生 input 事件,因此 @bind-Value 拿到的始终是最新源码。图片不自带上传通道:给了 ImageUpload 委托就弹文件选择框、把返回的地址写进 ,没给则退化为插入链接模板——存对象存储还是本地磁盘由宿主决定。
常见能力:
- 三态视图与全屏
- 工具栏与快捷键
- 纯托管渲染零依赖
- 协议白名单防 XSS
- 图片上传交宿主
- 字数行数统计
用法
<MarkdownEditor @bind-Value="@doc" @bind-View="@view" Height="320px" />
// 图片交给宿主保存,返回的地址直接写进 ![]()
<MarkdownEditor @bind-Value="@doc" View="edit" ImageUpload="SaveImage" MaxImageSize="2097152" />
async Task<string> SaveImage(IBrowserFile file)
{
var url = await oss.PutAsync(file);
UI.Success($"{file.Name} 已插入");
return url;
}
API 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Accept |
string |
"image/png,image/jpeg,image/gif,image/webp" |
文件选择框的 accept,默认常见四种图片格式。 |
Height |
string |
"260px" |
编辑区高度,如 260px;全屏时忽略本值改为撑满视口。 |
Id |
string |
null |
编辑区 textarea 的 id,留空自动生成。 |
ImageUpload |
Func<IBrowserFile, Task<string>> |
null |
图片上传委托:收到选中的文件,返回能直接写进 |
MaxImageSize |
Int64 |
5242880 |
单张图片大小上限(字节),0 表示不限制;超限直接提示、不进委托。 |
Placeholder |
string |
null |
输入框占位提示。 |
ReadOnly |
bool |
false |
只读:仍可切换预览,但工具栏置灰、快捷键失效。 |
ShowFooter |
bool |
true |
是否显示底部字数 / 行数统计。 |
ShowToolbar |
bool |
true |
是否显示顶部工具栏。 |
Value |
string |
null |
绑定的 Markdown 源码。 |
ValueChanged |
EventCallback<string> |
— | 事件 源码变化后的回调,工具栏与快捷键的改动同样会走到这里。 |
View |
string |
"split" |
视图模式:edit 仅编辑 / split 左源码右预览 / preview 仅预览,默认分栏。 |
ViewChanged |
EventCallback<string> |
— | 事件 视图模式变化回调,配合 @bind-View。 |
Visible |
bool |
true |
取得或设置组件是否可见,默认为false。 |
VisibleChanged |
EventCallback<bool> |
— | 事件 取得或设置组件可见性变化时的回调事件。 |
Class |
string |
null |
取得或设置组件的CSS类名,用于自定义样式。 |
Disabled |
bool |
false |
取得或设置组件是否禁用,默认为false。 |
Style |
string |
null |
取得或设置组件的内联样式,用于自定义样式。 |
所有组件均继承
BaseComponent,除上表参数外还支持Class、Style、Disabled、Visible。
扫码关注公众号
扫码加入 QQ 群