MVC Webgrid只显示1个Model列

时间:2013-09-16 12:14:27

标签: asp.net-mvc-4 webgrid

我尝试在Webgrid中显示列表,但是视图只显示一列,无论我做什么,我似乎无法显示其他列(我的模型有3列)属性和其中一个是复杂的,包含4个属性,所以我希望6列)。

查看:

@model IEnumerable<AIM.Police.DB.Factor>
@using AIM.Police.DB

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="float-right">

@{
    var grid = new WebGrid(Model);
}

@grid.GetHtml()
</div>

到视图我传递一个因子列表,定义为:

public class Factor  
{
    public Factor()
    {
        this.TraitVector = new TraitVector();
    }

    [Key]
    [Column(Order=0)]
    public FactorTypesEnum FactorType { get; set; }

    [Key]
    [Column(Order = 1)]
    public int ID { get; set; }
    public TraitVector TraitVector { get; set; }      
}

FactorTypesEnum和TraitVector定义为:

public enum FactorTypesEnum
{
    StimulusType = 1,
    OffenseType,
    InterrogationStage,
    InterrogeeStatus,
    ZoneOfRelevance,
    InterrogationExperience,
    InterrogationCount 
}

[ComplexType]
public class TraitVector
{       
    public double AttentionState { get; set; }
    public double AffectState { get; set; }
    public double AttitudeState { get; set; }
    public double AffiliationState { get; set; }
}

最后,这是Controller最简单的Index动作:

    public ActionResult Index(int? id)
    {
        return View(db.Factors.ToList());
    }

Model包含预期的47行Factor对象,包括为Factor(FactorType,ID和TraitVector)定义的所有属性,从DB表中读取并由Action传递给View,但是在生成的Html中只有ID列出现。

值得注意的是,模型Factor在一个单独的DLL中定义,而在DB中,所有数据字段都有值(无空值)。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您需要定义列。像这样:

<div id="gridContent">
    @grid.GetHtml(tableStyle: "webGrid",
            headerStyle: "header",
            alternatingRowStyle: "alt",
            selectedRowStyle: "select",
            columns: grid.Columns(
            grid.Column("Id", format: (item) => item.GetSelectLink(item.Id)),
            grid.Column("Name", " Name"),
            grid.Column("Description", "Description", style: "description"),
            grid.Column("Quantity", "Quantity")
     )) 
</div>

有关详细信息,请参阅http://www.codeproject.com/Tips/615776/WebGrid-in-ASP-NET-MVC4

答案 1 :(得分:0)

要回答我自己的问题,将数据显式绑定到网格的工作是什么,如下所示:

    grid.Bind(Model.Factors, new[] { "FactorType", "ID", 
                         "TraitVector.AttentionState", "TraitVector.AffectState", 
                         "TraitVector.AttitudeState", "TraitVector.AffiliationState"});

由于这个显式绑定在过去我没有必要在MVC webgrid中显示其他模型,我只能假设这与FactorType是枚举类型和/或{{}有关。 1}}是一个复杂的类型,并且webgrid无法自动绑定这些字段,因为它正在为“更简单”的类型做