1. 在新窗口打开链接
[Inject, NotNull] IJSRuntime? JS { get; set; }
await JS.InvokeVoidAsync("eval", @"let discard = open(https://www.blazor.zone/tables/edit
, _blank
)");
await JS.InvokeVoidAsync("eval", $"let discard = open({url}
, _blank
)");
2. 直接获取窗口宽度,不用写js脚本了吧?
var innerWidth = await JS.InvokeAsync
3. 使用cookie
原文链接: https://www.frankslowcodeblog.com/post/2023/03/23/session-variable-as-cookie-in-radzen-blazor
定义一个服务类:
using Microsoft.JSInterop;
namespace MyProject.Utils
{
public interface ICookie
{
public Task SetValue(string key, string value, int? days = null);
public Task<string> GetValue(string key, string def = "");
}
public class CookieService: ICookie
{
readonly IJSRuntime JSRuntime;
string expires = "";
public Cookie(IJSRuntime jsRuntime)
{
JSRuntime = jsRuntime;
ExpireDays = 300;
}
public async Task SetValue(string key, string value, int? days = null)
{
var curExp = (days != null) ? (days > 0 ? DateToUTC(days.Value) : "") : expires;
await SetCookie($"{key}={value}; expires={curExp}; path=/");
}
public async Task<string> GetValue(string key, string def = "")
{
var cValue = await GetCookie();
if (string.IsNullOrEmpty(cValue)) return def;
var vals = cValue.Split(';');
foreach (var val in vals)
if(!string.IsNullOrEmpty(val) && val.IndexOf('=') > 0)
if(val.Substring(0, val.IndexOf('=')).Trim().Equals(key, StringComparison.OrdinalIgnoreCase))
return val.Substring(val.IndexOf('=') + 1);
return def;
}
private async Task SetCookie(string value)
{
await JSRuntime.InvokeVoidAsync("eval", $"document.cookie = \"{value}\"");
}
private async Task<string> GetCookie()
{
return await JSRuntime.InvokeAsync<string>("eval", $"document.cookie");
}
public int ExpireDays
{
set => expires = DateToUTC(value);
}
private static string DateToUTC(int days) => DateTime.Now.AddDays(days).ToUniversalTime().ToString("R");
}
}
然后在 startup.cs 中添加此服务
services.AddScoped<ICookie, CookieService>();
在页面上使用
[Inject, NotNull] protected ICookie? Cookie { get; set; }
await Cookie.SetValue("mytest20", "Hello Blazor!");
_message = await Cookie.GetValue("mytest20");