0

Webgrid にリストを表示しようとしましたが、ビューには 1 つの列しか表示されず、何をしても他の列を表示できないようです (私のモデルには 3 つのプロパティがあり、そのうちの 1 つは複雑で 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>

View には、Factor のリストを次のように定義して渡します。

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; }
}

最後に、コントローラーの最も単純な Index アクションを次に示します。

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

Model には、Factor に定義されたすべてのプロパティ (FactorType、ID、および TraitVector) を含む、予想される 47 行の Factor オブジェクトが含まれます。これは、DB テーブルから読み取られ、アクションによってビューに渡されますが、生成された Html には ID 列のみが表示されます。

モデルである Factor が別の DLL で定義されていること、および DB ではすべてのデータ フィールドに値がある (null ではない) ことに注意してください。

誰でも私のためにこれを理解できますか?

4

2 に答える 2

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を参照してください。

于 2013-09-16T15:08:29.440 に答える
0

私自身の質問に答えるために、次のように、データをグリッドに明示的にバインドするのはどのような仕事でしたか:

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

過去に MVC webgrid で他のモデルを表示したとき、この明示的なバインディングは必要なかったので、これはFactorType列挙型である、および/またはTraitVector複合型であることに関係しており、webgrid が自動的にできないと仮定することしかできません。 「より単純な」タイプの場合と同様に、これらのフィールドをバインドします

于 2013-10-21T06:27:39.633 に答える