获取所选项目对象

时间:2018-03-29 12:09:12

标签: c# asp.net-mvc

这是我的意思的一个例子:

public class country
{
    public int pk_country { get; set; }
    public string name { get; set; }
    public lang lang { get; set; }
}

public enum lang
{
    en = 44,
    fr = 33
}

public class person
{

    string name { get; set; }

    public country country { get; set; }

    int pk_country { get; set; }

    decimal basicSalary { get; set; }

    decimal actualSalary { get { if (country.lang == lang.en) return (decimal)15.99 * basicSalary; else return basicSalary + (decimal)14.99; } }
}

在MVC应用程序中,用户键名为Country(DropDown Select List,因此我们只传递pk_country)和基本工资。
但是,在启动person类时,country对象为null,因此出现此错误:

  

对象引用未设置为对象的实例

是否有办法让国家/地区对象属性根据从视图传递的选定值pk_country知道其值。

在我的项目中,我使用ViewModel并且我不希望发出数据库请求,即获取所选pk_country的数据集以确定lang

2 个答案:

答案 0 :(得分:0)

您必须从数据库中选择它,因为我确定您的国家数量有限,但您可以摆脱此异常

  

对象引用未设置为对象的实例

只是在其构造函数

中初始化与Person实例关联的国家/地区对象
public class person{

 public person(){ country=new country(); }string name { get; set; }

public country country { get; set; }

int pk_country { get; set; }

decimal basicSalary { get; set; }

decimal actualSalary { get { if (country.lang == lang.en) return (decimal)15.99 * basicSalary; else return basicSalary + (decimal)14.99; } }}

答案 1 :(得分:0)

创建要存储的npm run doc:buildandserve --theme Postmark npm run compodoc --theme postmark 实体时,您必须使用所选ID加载person并分配它。没有办法解决这个问题。

country

从数据库加载现有public person CreatePerson(string name, decimal basicSalary, int countryId) { var person = new person { name = name, basicSalary = basicSalary }; var country = _dbContext.Country.Find(countryId); person.country = country; _dbContext.Person.Add(person); _dbContext.SaveChanges(); return person; } 时,如果配置正确,则可以自动加载person(延迟加载)。请参阅Lazy Loading in Entity Framework

附加说明:您的类和属性名称不遵守C#命名约定。类和属性名称应以大写字符开头,例如country代替Personperson代替BasicSalary。只有变量名称应以小写字符开头。