设计一个可以保存项目潜在价值的类(或类)以及用户实际选择的类的最佳方法是什么?我之前遇到过这个问题,并且总觉得我错过了核心类设计功能。
现在我经常做以下的事情
class MultiChoice
Name (I.e. Box Size)
Default Value ("22x15")
PotentialValues ({"10x10","20x20","22x15"})
但是这并没有处理用户选择的实际值,所以我将其添加进去。
class MultiChoice
Name (I.e. Box Size)
Default Value ("22x15")
PotentialValues ({"10x10","20x20","22x15"})
SelectedValue
虽然感觉不对,但是当我构建一个下拉列表时,我会用SelectedValue = null
填充内容。然后,当我存储数据时,我也存储了所有选项,这是我不需要的。
使用界面或其他语言构造处理此问题有更好的方法吗?我总觉得我错过了一些在这里显而易见的东西。
答案 0 :(得分:0)
你真的有两个独立的实体:
创建两个单独的类来表示这两个独立的概念。
答案 1 :(得分:0)
ASP.NET MVC具有SelectList类。虽然你可能实际上并没有在ASP.NET MVC中工作,但很明显微软认为“支持下拉类”的概念足以保证其自己的类。
无论您认为“模型”(包含业务域类和业务逻辑的程序部分),总会存在数据库表作为这些下拉列表的查找。
tblCountries
CountryID PK
CountryCode string
FullName string
在您的ViewModel中,会有相应的国家/地区列表,您可以从中填充下拉列表:
public class InvoiceViewModel
{
...
public int CountryID { get; set; }
public SelectList Countries { get; set; }
// or
public List<Country> Countries { get; set; }
...
}
当然,当你到达用户界面时,实际的下拉列表包含足够的管道来保存选择列表和选定的值。
答案 2 :(得分:0)
您真的只需要一个Value
字段。在构造函数中将它设置为您想要的任何内容(因此在创建对象时它是默认的)。您也可以将“潜在值”更改为静态,因此对整个班级来说都是一样的。
public class Box
{
public string Value { get; set; }
public static List<string> AllowedValues { get; private set; }
public Box()
{
AllowedValues.AddRange(new string[]{"10x10","20x20","22x15"});
Value = AllowedValues.First();
}
}
然后,当用户更改该值时,只需更新它即可。
Box thisBox = new Box();
string val = "22x15";
if (Box.AllowedValues.Contains(val))
thisBox.Value = val;