我正在寻找关于ViewModel定义的两种不同方法的一些看法
我有一个公司课
public class Company
{
public string Name { get; set; }
public int CountryID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
对于"创建"和"编辑"视图,我需要一个国家/地区列表来填充DropDownList以进行CountryID选择.我可以看到如何构建ViewModel的两个广泛选择,详见下文.
嵌套的ViewModel
public class CompanyCreateEditViewModel
{
public Company Company { get; set; }
public IEnumerable<Country> Countries{ get; set; }
....
}
Run Code Online (Sandbox Code Playgroud)
平面ViewModel
public class CompanyCreateEditViewModel
{
public string Name { get; set; }
public int CountryID { get; set; }
public IEnumerable<Country> Countries{ get; set; }
....
}
Run Code Online (Sandbox Code Playgroud)
目前我赞成使用嵌套方法,因为它使我免于第二次定义字段,但我想把它打开以获得更好的方法和评论.
谢谢
我有一个简单的实体,由Entity Framework 4使用VS 2010 RC生成.它看起来像下面的POCO.
public class Company
{
public int ID { get; set; }
public string Name { get; set; }
public string ISOCode { get; set; }
public boolean Active { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的存储库代码如下.'db'是我在构造函数中初始化的上下文.
public void EditCountry(Country countryToEdit)
{
db.Countries.Attach(new Country { ID = countryToEdit.ID });
db.Countries.ApplyCurrentValues(countryToEdit);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
在countryToEdit中将Active字段从false更改为true会生成以下SQL
update [dbo].[Countries]
set [Name] = @0, [ISOCode] = @1, [Active] = @2
where ([ID] = @3)
@0 nvarchar(256),@1 nvarchar(12),@2 bit,@3 int,@0='Algeria',@1='DZ',@2=1,@3=4
Run Code Online (Sandbox Code Playgroud)
这是预料之中的.
如果我在countryToEdit中将Active字段从true更改为false,则会生成以下SQL
update [dbo].[Countries] …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种干净的方法来处理它们传递给View时LINQ to SQL模型类中的空对象引用.
简单的例子.
TableA在表B中有一个FK.TableA中的任何行可能存在也可能不存在FK关系.
我的LINQ to SQL类将此关系表达为ClassA.ClassB.Property,但在某些情况下,由于null外键,ClassA.ClassB是一个空对象
我想在视图的表中列出ClassA.Property和ClassA.ClassB.Property
到目前为止我的视图代码看起来像
<td>
<% if ((classA.classB) != null) { %>
<%= Html.Encode(classA.classB.Property)%>
<% } %>
</td>
Run Code Online (Sandbox Code Playgroud)
在View中有更清晰的方法吗?
我试过了
<td>
<%= Html.Encode(classA.classB.Property ?? "")%>
</td>
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为空值不是"属性"而是"classB".
我是整个MVC的新手,但视图似乎是选择如何处理空值显示的正确位置.