gpt4 book ai didi

asp.net-mvc - 如何将对象传递给我的 VIewModel 的构造函数? ASP.NET MVC 3,忍者

转载 作者:行者123 更新时间:2023-12-04 13:28:44 25 4
gpt4 key购买 nike

我一直在使用 Bob Cravens 博客中描述的存储库模式来创建我的应用程序,但我有点新,仍然在寻找解决方法。我想将我的 DataService 对象注入(inject)到我的 ViewModel 的构造函数中,这样我就可以创建一个 SelectList 对象,并在我的 View 中创建一个下拉框。但是我似乎无法让绑定(bind)工作,每次创建 ViewModel 时,它都会查找/执行无参数构造函数!我在 SO 上尝试了各种使用答案的方法,但无济于事。帮助将不胜感激。

View 模型:

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

public ServerCreateViewModel()
{

}

public ServerCreateViewModel(DataService _dataService)
{

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

}

忍者模块:
        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>());

Controller :
    public ActionResult Create(ServerCreateViewModel viewModel)
{

return View(viewModel);
}

最佳答案

你不应该那样做!

View 模型(实际上是所有模型)应该只是包含一些数据的存储桶。它们不应依赖于任何业务逻辑、服务等。

填充模型并将它们传递给 View 是 Controller 的责任。

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

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

return View(viewModel);
}

DataService 应该被注入(inject)到 Controller 中,而不是 View 模型中。

关于asp.net-mvc - 如何将对象传递给我的 VIewModel 的构造函数? ASP.NET MVC 3,忍者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7820583/

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