加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何将对象传递给VIewModel的构造函数? ASP.NET

发布时间:2020-12-16 03:20:32 所属栏目:asp.Net 来源:网络整理
导读:我一直在使用Bob Cravens博客中描述的存储库模式来创建我的应用程序,但我有点新,并且仍在寻找解决方案.我想将我的DataService对象注入到我的ViewModel的构造函数中,这样我就可以创建一个SelectList对象,并在我的视图中创建一个下拉框.但是我似乎无法使绑定工
我一直在使用Bob Cravens博客中描述的存储库模式来创建我的应用程序,但我有点新,并且仍在寻找解决方案.我想将我的DataService对象注入到我的ViewModel的构造函数中,这样我就可以创建一个SelectList对象,并在我的视图中创建一个下拉框.但是我似乎无法使绑定工作,每次我创建ViewModel它都会查找/执行无参数构造函数!我已尝试过各种方式在这里使用答案,但无济于事.非常感谢帮助.

视图模型:

public class ServerCreateViewModel
{
    public SelectList Companies { get; private set; }

    public ServerCreateViewModel()
    {

    }

    public ServerCreateViewModel(DataService _dataService)
    {

        Companies = new SelectList(_dataService.Companies.All(),"Id","CompanyName");

    }

Ninject模块:

Bind<DataService>().ToSelf()
            .InRequestScope();

        var _dataService = Kernel.Get<DataService>();

        Bind<ServerCreateViewModel>()
            .ToSelf()
            .WithConstructorArgument("_dataService",_dataService);

        //Bind<ServerCreateViewModel>()
        //    .ToSelf()
        //    .WithConstructorArgument("_dataService",ctx => ctx.Kernel.Get<DataService>());

控制器:

public ActionResult Create(ServerCreateViewModel viewModel)
    {

        return View(viewModel);
    }

解决方法

你不应该这样做!

视图模型(实际上所有模型)应该只是带有一些数据的桶.他们不应该依赖任何业务逻辑,服务等.

控制器负责填充模型并将其传递给视图.

public class ServerCreateViewModel
{
    public SelectList Companies { get; private set; }
}

public ActionResult Create()
{
    var viewModel = new ServerCreateViewModel
    {
        Companies = new SelectList(_dataService.Companies.All(),"CompanyName")
    };

    return View(viewModel);
}

应将DataService注入控制器,而不是视图模型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读