gpt4 book ai didi

c# - DotVVM 内部 ViewModel 中的上下文为空

转载 作者:行者123 更新时间:2023-12-03 10:35:15 24 4
gpt4 key购买 nike

我正在制作一个 DotVVM 应用程序,我想在每个页面上显示注销按钮或登录表单。因此,我制作了使用 ViewModel 处理登录或注销的自定义控件。
由于我希望在每个页面上都有这个控件,所以我将它放在我的 .master 页面中。

我的 DotMaster 页面如下所示:

@viewModel MyApp.ViewModels.AppViewModelBase, MyApp
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{value:Title}}</title>
</head>
<body>
<nav class="navbar navbar-inverse navbar-default">
...
<cc:LoginPanel DataContext="{value: LoginSection}"></cc:LoginPanel>
...
</nav>
...
</body>
</html>

对应的ViewModel AppViewModelBase 看起来像这样。
using System.Threading.Tasks;
using DotVVM.Framework.ViewModel;
using MyApp.ViewModels.Login;

namespace MyApp.ViewModels
{
public class AppViewModelBase : DotvvmViewModelBase
{
public string SubpageTitle { get; set; }

public string Title { get { return string.Format("{0} - {1}", LogoText, SubpageTitle); } }

public LoginSection LoginSection { get; set; } = new LoginSection();
...
}
}

我的 登录专区 ViewModel 也继承自 DotvvmViewModelBase ,问题是, 的 Context 属性登录专区永远不会被填充并保持为空。
我应该手动设置内部 ViewModel 的上下文吗?我还注意到 AppViewModelBase 的上下文没有在它的基本构造函数中设置,而是在稍后的某个地方设置。

这个用例的最佳实践是什么?

最佳答案

在当前版本的 DotVVM (0.8.6-pre) 中,页面 View 模型的 Context 属性由框架设置(在调用 Init 方法之前)。

但是,如果 View 模型包含其他对象,则不会设置这些 Context(主要是由于性能原因 - 我们必须使用反射浏览 View 模型并分析每个属性)。

现在,我建议将 Context 属性传递给 Init 中的子对象。阶段。

public override Task Init()
{
LoginSection.Context = Context;
}

但是,在 future 的版本中,我们计划添加一些机制来自动注入(inject)这些框架对象。

关于c# - DotVVM 内部 ViewModel 中的上下文为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33302780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com