【问题标题】:MVC Webgrid show only 1 Model columnMVC Webgrid 仅显示 1 个模型列
【发布时间】:2013-09-20 14:08:01
【问题描述】:

我尝试在 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());
    }

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

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

谁能帮我解决这个问题?

【问题讨论】:

    标签: asp.net-mvc-4 webgrid


    【解决方案1】:

    您需要定义列。像这样的:

    <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

    【讨论】:

      【解决方案2】:

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

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

      由于过去我在 MVC webgrid 中显示其他模型时不需要此显式绑定,因此我只能假设这与 FactorType 是枚举类型和/或 TraitVector 是一个复杂的类型,并且 webgrid 不能像对“简单”类型那样自动绑定这些字段

      【讨论】:

        猜你喜欢
        • 2012-10-18
        • 2016-02-05
        • 1970-01-01
        • 2015-03-13
        • 2014-07-21
        • 2016-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多