gpt4 book ai didi

c# - 如何为父对象属性设置默认绑定(bind)属性?

转载 作者:行者123 更新时间:2023-11-30 18:40:21 26 4
gpt4 key购买 nike

我遇到了很多看起来像这样的东西:

public class TestClass
{
public string Property1 {get;set;}
public string Property2 {get;set;}
public AddressType Type {get;set;}
[RequiredIf("", "", ErrorMessage="...")]
public int TypeId
{
get
{
if (Type == null)
return 0;
else
return Type.Id;
}
set
{
Type = new AddressType() { Id = value };
}
}
}

public class AddressType
{
public int Id {get;set;}
public string Description {get;set;}
}

这样我就可以以 Razor 形式对信息进行建模并来回绑定(bind)。我想知道是否有任何人知道我可以在哪里应用针对“AddressType”的属性来设置该类的默认绑定(bind)属性,或者针对 TestClass 的“类型”字段放置一个属性并说“当您绑定(bind),真正绑定(bind)到 Type.Id,但要验证整个对象,否则...

不确定我问的是否正确,但如果可能的话,我只是想要一个更简洁的实现...我觉得在类中添加 TypeId 是不必要的麻烦,而且它很难阅读。

谢谢大家!

最佳答案

好吧,我不是 100% 理解您在这里提出的问题,但我会假设 AddressType 可以为 null 来试一试。

public class TestClass
{
public AddressType? Type {get;set;}
public int TypeId
{
get
{
return Type.HasValue ? Type.Value.Id : 0;
}
}
}

查看 AddressType 虽然我猜测它是一种源自某种数据存储的查找类型。我使用 T4 模板在我的应用程序中生成这些类型的查找列表(在版本之间不更改值)作为枚举。如果你这样做,你会减轻很多压力。

现在,如果您想要的是 Razor View 中的 AddressType 值的下拉列表,您将不得不在 Controller 中做一些大工作(谢天谢地)

public class BetterTestClass
{
public AddressType? Type {get;set;}
}

...在您的地址 Controller 中

public ActionResult Create(){

// the name in the ViewBag should match
// the property you want to have a list on
ViewBag.Type = repository
.AddressTypes
.ToList()
.Select(p => new SelectListItem {
Key = p.Id,
Value = p.Description});

ViewData.Model = new BetterTestClass();
return View();
}

如果你搜索@Html.DropDownList,周围有很多例子

编辑

很难弄清楚你想通过你的问题达到什么目的。但我会尽力帮忙。首先,我是否正确理解了您的问题:

  • TestClass 与 AddressType 具有 0..1 关系
  • Address Type 有一个 Id,因为它是一个 Entity 类
  • 出于某种原因,您希望在设置 AddressType 时通过 UI 设置 AddressType 的 ID。 (我在回答中概述了您不需要必需属性的推论)

关于c# - 如何为父对象属性设置默认绑定(bind)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8434433/

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