小编Cep*_*has的帖子

ASP.NET MVC中的平面与嵌套ViewModel类

我正在寻找关于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)

目前我赞成使用嵌套方法,因为它使我免于第二次定义字段,但我想把它打开以获得更好的方法和评论.

谢谢

asp.net-mvc viewmodel

31
推荐指数
2
解决办法
5741
查看次数

实体框架4 - 并不总是使用ApplyCurrentValues更新布尔属性

我有一个简单的实体,由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)

entity-framework

6
推荐指数
1
解决办法
3105
查看次数

ASP.Net MVC - 视图中的空对象

我正在寻找一种干净的方法来处理它们传递给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的新手,但视图似乎是选择如何处理空值显示的正确位置.

asp.net-mvc linq-to-sql

4
推荐指数
1
解决办法
1357
查看次数