2016-03-28 23 views
1

私はページにMVC WebGridを持っており、グリッドには各行の選択リンクがあります。同じビューの中から、WebGrid.SelectedRowオブジェクトに関連付けられたモデルオブジェクトを取得し、ビュー内で使用したいと思います。同じビュー内からMVC WebGridのSelectedRowオブジェクトを使用するにはどうすればよいですか?

SelectedRowオブジェクトにアクセスするすべての例では、オブジェクトを使用して別のビュー/部分表示にオブジェクトを渡す方法について説明しています。私の場合は、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)などのキャストステートメントも試してみました。そのような場合は、ページが読み込まれますが、レコードを選択しようとすると、上記の行がヒットすると、ブラウザーは私に違った類似のエラーを表示します。

WebGrid.SelectedRowモデルオブジェクトに、WebGridと同じビューからアクセスして使用するにはどうすればよいですか?

答えて

1

次の回答がお役に立てば幸いです。選択した行の内容が表示されます

@{ 
    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> 
+0

これは機能します。私は 'Value'プロパティを知らなかった。コードにブレークポイントを置き、メモリ内の値を検査することで、何か別のことが暗示されていました。具体的には、 'SelectedRow'オブジェクトが私のモデルオブジェクトであったはずです。ありがとうございました。 – RLH

関連する問題