gpt4 book ai didi

c# - Razor View 中的 ViewModel 与 InputModel

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:28 25 4
gpt4 key购买 nike

正如我在 10 Good practices for asp.net mvc webapplications 上发现的那样最好在 ViewModel(代 TableView 的模型)和 InputModel(代表用户输入的数据)中拆分 mvc 模型。

ViewModel 获取 Type InputModel 的属性。 InputModel 携带可由用户编辑的数据。

public class EmployeeInputModel{

public string Name {get;set;}
public Id? DepartmentId{get;set;}

}


public class EmployeeCreateViewModel{
public IList<Department> Departments{get;set;}
public EmployeeInputModel EmployeeModel{ get;set;}
}

Controller 方法看起来像:

public class EmployeeController : Controller{

public ActionResult Create(){
var viewModel = new EmployeeCreateViewModel(DepartmentService.GetAll(), new EmployeeInputModel());
return View(viewModel);
}

public ActionResult Create(EmployeeInputModel createModel){
try{
EmployeeService.Create(...);
return RedirectToAction("Index");
} catch (Exception ex){
var viewModel = new EmployeeCreateViewModel(DepartmentService.GetAll(), createModel);
return View(viewModel)
}

}
}

View 看起来像:

  @model EmployeeCreateViewModel

@Html.EditorFor(m => m.EmployeeModel)

Editor Partial 就像:

  @model EmployeeInputModel

@Html.TextBoxFor(m => m.Name)
@Html.DropDownFor(m => m.Department, ???)

这对我来说非常有用,除非我谈到了 DropDownLists(在示例中参见部门)。因为 EditorTemplate 不知道 ViewModel,只知道 InputModel。

我不想将部门列表放入输入模型,因为它不是该列表的预期位置(我必须绑定(bind)它们)。它必须在 View 模型中。输入模型的属性也不应该在 ViewModel 中。

有人知道如何在一个 View 中实现 View 模型和输入模型的分离吗?

最佳答案

您必须创建部门的模型抽象。像这样:

public class EmployeeInputModel{
public string Name {get;set;}
public List<DepartmentInputModel> Departments{get;set;}
}

public class DepartmentInputModel{
public int Id;
public string Name;
}

然后您可以在下拉列表中只显示部门名称。该值将是部门的 ID。

你可以看看this SO question举个例子。

关于c# - Razor View 中的 ViewModel 与 InputModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26588957/

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