c# - 如何在 MVC 模型中操作字符串
问题描述
我正在创建一个 ASP.NET 项目,并且我有一个CustomerModel
由 Entity Framework 生成的项目(因为首先是数据库)。我正在尝试操作一个Name
字段,以便我可以将它分别分成一个FirstName
和LastName
。这是我的模型:
public partial class Customer
{
public int CustomerID { get; set; }
public string Name { get; set; }
...
// something like this?
// I know this will cause an error though
FirstName = Name.Substring(0, Name.IndexOf(" "));
当我这样操作它时我是正确的吗?例如,当我创建数据并且值转到变量而不是字段时,这也会影响任何事情。
解决方案
你怎么知道一个人不输入三四个名字?很多人都有中间名。你会如何从逻辑上处理它?那些姓氏是两部分的人,比如范佩尔特或圣詹姆斯呢?
如果你能以某种方式定义它,你可以在你的设置器中为 Name 属性使用逻辑。设置好后,将其拆分为各个部分。这是一个简单的例子:
public class NameExample
{
private string name;
private string firstName;
private string lastName;
public string Name
{
get { return name; }
set
{
if( value != name )
{
name = value;
if (string.IsNullOrEmpty(name)) return;
var names = name.Split(' ');
firstName = names[0];
if (names.Length > 1) lastName = names[1]; // Is our person Cher? ;-)
}
}
}
public string FirstName
{
get
{
return firstName;
}
set
{
firstName = value;
name = firstName + (string.IsNullOrEmpty(lastName) ? "" : " " + lastName);
}
}
public string LastName
{
get => lastName;
set {
lastName = value;
name = firstName + (string.IsNullOrEmpty(lastName) ? "" : " " + lastName);
}
}
您可以使用 Entity Framework 执行此操作,因为它在从数据库加载值时实际上会调用属性的设置器。它调用 getter 来获取要写入数据库的值。这就是为什么您必须为域模型使用公共属性而不是公共字段的原因。
我的例子故意冗长而快速。您可以根据需要对其进行微调。
推荐阅读
- java - Openssl 加密 [Kotlin] [Android] (PHP)
- vba - 我可以应用和执行来自不同文档的代码吗?
- javascript - 使用 webpack 将 SASS 编译成多个 CSS 文件
- android - 如何将导出的 whatsapp 文档共享到 react-native 应用程序
- python-3.x - 如何查询第二个数据框以填充第一个数据框的列中的值
- vue.js - Vuex watch 没有触发所有状态变化
- python - 使用带有 conda 环境的 docker 部署到 Heroku 后无法访问烧瓶应用程序
- python - 使用 for 循环引用变量
- angular - AmCharts4:导出菜单不提供 CSV、XLSX 和 JSON 选项
- javascript - 为什么 yAxisBar 没有显示正确的数据,D3