エンティティItems
の子オブジェクト(Request
)を表示する必要があります。リクエストの代わりに、元のリクエストエンティティよりも多くの情報を含むビューを渡す方が良いことがわかりました。このビューはRequestInfo
と呼ばれ、元のリクエストId
も含まれています。
次に、MVCビューで私がやった:
@model CAPS.RequestInfo
...
@Html.RenderAction("Items", new { requestId = Model.Id })
レンダリングするには:
public PartialViewResult Items(int requestId)
{
using (var db = new DbContext())
{
var items = db.Items.Where(x => x.Request.Id == requestId);
return PartialView("_Items", items);
}
}
これは一般的なリストを表示します:
@model IEnumerable<CAPS.Item>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Code)
</th>
<th>
@Html.DisplayNameFor(model => model.Description)
</th>
<th>
@Html.DisplayNameFor(model => model.Qty)
</th>
<th>
@Html.DisplayNameFor(model => model.Value)
</th>
<th>
@Html.DisplayNameFor(model => model.Type)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Code)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.Qty)
</td>
<td>
@Html.DisplayFor(modelItem => item.Value)
</td>
<td>
@Html.DisplayFor(modelItem => item.Type)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
</table>
しかし、RenderAction
行でコンパイラエラーが発生しています"暗黙的に型 'void'を 'object'に変換できません"アイデアはありますか?
Renderメソッドを呼び出すときに、次の構文を使用する必要があります。
@{ Html.RenderAction("Items", new { requestId = Model.Id }); }
@syntax
(中括弧なし)は、ページにレンダリングされる戻りタイプを予期します。ページからvoidを返すメソッドを呼び出すには、呼び出しを中括弧で囲む必要があります。
より詳細な説明については、次のリンクを参照してください。
http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx
便利な代替手段:
@model CAPS.RequestInfo
...
@Html.Action("Items", new { requestId = Model.Id })
このコードはMvcHtmlStringを返します。 partialviewおよび結果の表示で動作します。 {}文字は必要ありません。