如何从同一视图中使用 MVC WebGrid 的 SelectedRow 对象?

How can I use the SelectedRow object of a MVC WebGrid from within the same view?

我在页面上有一个 MVC WebGrid,我的网格上的每一行都有一个 selection link。在同一视图中,我想获取与 WebGrid.SelectedRow 对象关联的模型对象并在视图中使用它。

我发现的每个访问 SelectedRow 对象的示例都提供了有关如何使用该对象将对象传递到另一个 view/partial 视图的说明。在我的例子中,我想从与 WebGrid 相同的视图中访问这个对象。

这是一些通用的示例代码,带有与错误相关的注释。

@{

    var grid = new WebGrid(dataCollection)
    @grid.GetHTML(columns: "ID", "User ID"), 
        grid.Column("UserName","Name"),
        grid.Column("", format: @<text>@item.GetSelectLink("Edit")</text>)
}

<!-- FURTHER DOWN IN MY MARKUP //-->

<div class="widget">
@if(grid.HasSelection)
{
    var obj = @grid.SelectedRow;

    //The example below reports the following error when 
    //navigating to this page:
    //
    //CS0039: Cannot convert type 
    //  'System.Web.Helpers.WebGridRow' to 
    //  'Models.User' via a reference 
    //  conversion, boxing conversion, unboxing conversion, 
    //  wrapping conversion, or null type conversion
    usr = obj as User;
    if (usr != null) <text>usr.ID</text>;
         <!-- FIND A WAY TO PRINT SELECTED CONTENT -->
}
</div>

我也尝试过转换语句,例如 ((User)@grid.SelectedRow)。在这种情况下,页面将加载,但一旦我尝试 select 一条记录并且上面的行被命中,浏览器就会给我不同但相似的错误。

如何从与我的 WebGrid 相同的视图中访问和使用 WebGrid.SelectedRow 模型对象?

希望以下回答对您有所帮助。会显示选中的行内容

@{
    List<Person> person = new List<Person>();
    person.Add(new Person { PersonCode = "1001", PersonName = "Satya Nadella" });
    person.Add(new Person { PersonCode = "1002", PersonName = "Lisa Su" });
    person.Add(new Person { PersonCode = "1003", PersonName = "Jeff Clarke" });
    person.Add(new Person { PersonCode = "1004", PersonName = "Mark Fields" });
    person.Add(new Person { PersonCode = "1005", PersonName = "Phebe Novakovic" });
    person.Add(new Person { PersonCode = "1006", PersonName = "Mary T. Barra" });
    person.Add(new Person { PersonCode = "1007", PersonName = "Rajeev Suri" });
    person.Add(new Person { PersonCode = "1008", PersonName = "Michel Combes" });
}

@{
    WebGrid grid = new WebGrid(person, rowsPerPage: 10);

    @grid.GetHtml(columns: grid.Columns(grid.Column("PersonCode", "Code"), grid.Column("PersonName", "Name"), grid.Column("", format: @<text>@item.GetSelectLink("Edit")</text>)))
}

<div>
    @if (grid.HasSelection)
    {
        if (grid.SelectedRow != null)
        {
            <div>
                Code: @grid.SelectedRow.Value.PersonCode
            </div> 
            <div>
                Name: @grid.SelectedRow.Value.PersonName
            </div> 
        }        
    }
</div>