Blazor razor 注释参数 SupplyParameterFromQuery SupplyParameterFromForm OnInitializedAsync
参数属性:
[SupplyParameterFromQuery] public int Id { get; set; } [SupplyParameterFromForm] public Movie? Movie { get; set; }
[SupplyParameterFromQuery]
:这个特性表明Id
参数是从查询字符串中获取的。例如,在URLhttps://example.com/movies/edit?id=123
中,123
就是通过查询字符串传递给组件的Id
值。[SupplyParameterFromForm]
:这个特性表明Movie
参数是从表单提交中获取的。当用户在表单中填写电影信息并提交时,Blazor会将表单数据绑定到Movie
对象。
OnInitializedAsync
方法:
protected override async Task OnInitializedAsync() { Movie ??= await DB.Movie.FirstOrDefaultAsync(m => m.Id == Id); if (Movie is null) { // Need a way to trigger a 404 here } }
- 这是一个生命周期方法,在组件初始化时被调用。它用于获取要编辑的电影数据。
- 首先,通过
DB.Movie.FirstOrDefaultAsync
方法从数据库中获取Id
对应的电影数据,并将结果赋值给Movie
属性。如果数据库中不存在对应的电影数据,Movie
将为null
。 - 然后,检查
Movie
是否为null
。如果是null
,则表示没有找到对应的电影数据,需要触发一个404错误。
更新电影数据的异步方法UpdateMovie
public async Task UpdateMovie() { DB.Attach(Movie!).State = EntityState.Modified; try { await DB.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!MovieExists(Movie!.Id)) { // Need a way to trigger a 404 here } else { throw; } } NavigationManager.NavigateTo("/movies"); }
-
更新实体状态:
DB.Attach(Movie!).State = EntityState.Modified;
:这行代码的目的是将Movie
实体的状态设置为Modified
。
在Entity Framework中,实体具有不同的状态(如Detached
、Unchanged
、Added
、Deleted
、Modified
),这些状态决定了实体在数据库中的操作。
通过将Movie
实体的状态设置为Modified
,表示该实体已经被修改,当调用SaveChangesAsync
方法时,Entity Framework会生成相应的SQL语句来更新数据库中的对应记录。
-
处理并发冲突:
- 如果在保存更改时发生
DbUpdateConcurrencyException
异常(通常在多个用户同时尝试更新同一记录时可能发生),代码会进入异常处理块。 - 在异常处理块中,首先检查通过
MovieExists(Movie!.Id)
方法判断数据库中是否还存在具有相同Id
的电影记录。
如果不存在,同样需要处理404错误的情况(这里的注释提到了一个已知问题,即目前还没有直接的方法来触发404错误)。
如果存在,则重新抛出异常,以便在更高层次进行处理。
- 如果在保存更改时发生
标签:
blazor
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
2022-11-27 todolist 外观模式