Bob's Blog

Web开发、测试框架、自动化平台、APP开发、机器学习等

返回上页首页

MAUI加Blazor做一个跨平台的记账APP(二)新增账户页面



新增的第一个页面是账户总览,也就是展示当前有哪些账户,分别余额多少,比如银行卡、贵金属、股市等。并且打算可以通过点击账户进入到该账户的收支明细页面。

先不管外观布局,先增加页面再修改。

在Pages目录右键新增一个razor文件取名为Accounts.razor,这个文件就是账户总览。

@page "/accounts"
@page "/my_accounts"

<PageTitle>账户</PageTitle>

<h1>资金账户汇总</h1>

这里的@page就代表路由,这里写了两个,代表如果是导航到accounts或者my_accounts都会由这个文件来渲染。

其他的可以直接加html和css之类。

再新增一个razor文件取名为Account.razor,这个文件是指定账户的收支细目内容。

@page "/account/{Id:int?}"

<PageTitle>账户细目</PageTitle>
<h1>指定资金账户</h1>
<p>Account ID: @Id</p>

@code {
    [Parameter]
    public int? Id { get; set; }

    protected override void OnParametersSet()
    {
        Id = Id ?? 0;
    }
}

这里可以看到@page有些不一样,这里代表可以传递参数。

@code则是关键词代表该页面的代码逻辑,意味着前后端都可以用c#写,甚至于html的部分也可以通过@foreach等各类关键词集成c#代码。

可以留意的是,@code可以写在razor里,也可以新增一个同名到多了.cs后缀的文件比如Account.razor.cs,相关的@code代码逻辑可以放到这个文件里管理,不一定全部写在razor文件里与html等完全混杂。

比如去掉这里的@code,新增Account.razor.cs, 写入如下内容和上面的效果是一样的。

using Microsoft.AspNetCore.Components;

namespace accountingMAUIBlazor.Pages;


public partial class Account
{

    [Parameter]
    public int? Id { get; set; }

    protected override void OnParametersSet()
    {
        Id = Id ?? 0;
    }
}

这里的逻辑的意思是:先定义一个参数([Parameter]),指定为int,覆写OnParametersSet方法,允许传递的为空,如果id有值且是int,则id为该值,否则如果是null,则id默认为0。这样比较稳定,不会出现随意乱传乱写值导致的报错。

加了页面组件后,需要加对应的入口,这里先临时放在navmenu里,当然最后肯定要修改menu。

打开shared目录下的NavMenu.razor,类似模板中的fetchdata里的增加两个简单的入口:

<div class="nav-item px-3">
    <NavLink class="nav-link" href="accounts">
        <span class="oi oi-list-rich" aria-hidden="true"></span> Accounts
    </NavLink>
</div>
<div class="nav-item px-3">
    <NavLink class="nav-link" href="account">
        <span class="oi oi-list-rich" aria-hidden="true"></span> Account
    </NavLink>
</div>

但现在是没有具体数据的,也不能写死,于是接下来会改一下向后端api请求数据再展示,以及账户总览的展示样式。

下一篇:  MAUI加Blazor做一个跨平台的记账APP(三)请求后端接口
上一篇:  pywinauto中遇到ElementAmbiguousError错误的几种处理方式

共有0条评论

添加评论

暂无评论