我需要显示实体Items
的一些子对象(Request
)。我发现最好传递一个包含比原始请求实体更多信息的 View 来代替请求。我将此 View 称为RequestInfo
,它还包含原始的Requests Id
。
然后在MVC View 中,我做了:
@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
关于c# - 在MVC4问题中使用RenderAction(actionname,values),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14157072/