gpt4 book ai didi

asp.net-mvc - asp.net mvc View 模型。它们应该包含多少逻辑(如果有)

转载 作者:行者123 更新时间:2023-12-04 17:58:48 26 4
gpt4 key购买 nike

我一直在研究 mvc 的 View 模型,我正在寻找最好的方法来做它们。我已经阅读了大量不同的文章,但似乎没有一篇是“最好的方法”。到目前为止,我可能有一个具有以下属性的 Customer 模型:

  • 名字
  • 姓氏
  • 标题
  • 地点

  • 其中位置是数据库中位置表的外键。

    我希望能够编辑此客户,但只能编辑名字、姓氏和位置。我不担心编辑中的标题。所以在我看来,我需要传递一个客户和一个选定的列表。

    现在从我读过的内容来看,我有以下选择(可能还有更多)。

    所以我的问题基本上是哪个是最好的?

    1)

    将选择列表添加到 ViewData["Location"]并且只是创建一个强类型的客户 View ?

    2)

    创建一个 View 模型,我在其中传递客户并选择列表(数据访问在 Controller 中完成):
    public class ViewModelTest
    {
    public Customer Customer { get; set; }
    public SelectList Locations { get; set; }

    public ViewModelTest(Customer customer, SelectList locations)
    {
    Customer = customer;
    Locations = locations;
    }
    }

    3)

    创建一个 View 模型,我在其中传递客户和位置列表,并在 View 模型中创建选择列表。
    public class ViewModelTest
    {
    public Customer Customer { get; set; }
    public SelectList Locations { get; set; }

    public ViewModelTest(Customer customer, List<Location> locations, string selectedLocation)
    {
    Customer = customer;
    Locations = new SelectList(locations, "LocationID", "LocationName", selectedLocation);
    }
    }

    4)

    传递一个客户和存储库并在 View 模型中进行数据访问。
    public class ViewModelTest
    {
    public Customer Customer { get; set; }
    public SelectList Locations { get; set; }

    public ViewModelTest(Customer customer, IRepository repository, string selectedLocation)
    {
    Customer = customer;
    Locations = new SelectList(repository.GetLocations(), "LocationID", "LocationName", selectedLocation);
    }
    }

    5)

    仅使用我需要的属性创建 View 模型:
    public class ViewModelTest
    {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public SelectList Locations { get; set; }

    public ViewModelTest(Customer customer, SelectList locations)
    {
    FirstName = customer.FirstName;
    LastName = customer.LastName ;
    Locations = locations;
    }
    }

    6)

    或上述或其他方式的其他组合。

    欢迎所有意见。

    最佳答案

    这是我的建议:拥有一个反射(reflect)强类型 View 字段的 View 模型:

    public class SomeViewModel
    {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Location { get; set; }
    public IEnumerable<SelectListItem> PossibleLocations { get; set; }
    }

    并在您的 Controller 操作中填充此 View 模型:
    public ActionResult Index()
    {
    var customer = Repository.GetCustomer();
    var locations = Repository.GetLocations();
    var viewModel = new SomeViewModel
    {
    FirstName = customer.FirstName,
    LastName = customer.LastName,
    Location = customer.Location,
    PossibleLocations = new SelectList(locations, "LocationID", "LocationName", customer.Location);
    };
    return View(viewModel);
    }

    [HttpPost]
    public ActionResult Index(SomeViewModel viewModel)
    {
    // TODO: Handle the form submission
    return View(viewModel);
    }

    当然,在模型和 View 模型之间手动进行映射,如我的示例所示可能会变得非常麻烦,在这种情况下,我建议您查看 AutoMapper .

    关于asp.net-mvc - asp.net mvc View 模型。它们应该包含多少逻辑(如果有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3060765/

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