是否有一种方法来设置asp-route-{value}动态基于模型属性?



我想生成从模型中获取所有必要信息的锚标记。在Razor页面视图中,我现在有这样的内容:

<a asp-page="/Reports/LastPeriod"
asp-route-fromtime="@DateTimeOffset.UtcNow.AddDays(-30).ToString("yyyy-MM-dd")"
>Last 30 days
</a>

我想重构这个锚,使它从模型中动态呈现,看起来如下:

public class LinkTag {
public Title { get; set; }
public Page { get; set; }
}

现在是否有可能从模型中渲染asp-route-fromtime?这意味着我必须在模型中添加键值对,将被渲染为:asp-route-{key}={value}

。如果我像这样添加RouteValues属性:

public class LinkTag {
public Title { get; set; }
public Page { get; set; }
public Dictionary<string,string> RouteValues { get; set; }
}

是否有一种方法可以动态地将此属性映射到razor页面视图中<a>标签的asp-route-{key}={value}属性集合?

如果你序列化你的字典,你可以创建一个单一的路由值

public class LinkTag
{
public string Title { get; set; }
public string Page { get; set; }
public Dictionary<string, string> RouteValues = new();
public string RouteValue
{
get
{
var serialized = System.Text.Json.JsonSerializer.Serialize(RouteValues);
return Convert.ToBase64String(Encoding.UTF8.GetBytes(serialized))
.Replace("+", "-").Replace("/", "_").Replace("=", ""); // URL safe Base64
}
set
{
int len = value.Length;
// Restore padding and convert to standard Base64
var base64Encoded = value.Replace("_", "/").Replace("-", "+") + new string('=', (4 - len % 4) % 4);
var serialized = Convert.FromBase64String(base64Encoded);
RouteValues = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, string>>(serialized) ?? new();
}
}
}

最新更新