Asp.net mvc 直接访问时能够查看PartialView,但不能使用HTML.Partiaul
我有这样一个局部视图,它应该为我提供请求的所有相关记录:Asp.net mvc 直接访问时能够查看PartialView,但不能使用HTML.Partiaul,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我有这样一个局部视图,它应该为我提供请求的所有相关记录: public ActionResult DetailsList(short? id) { var requestDetails = db.RequestDetails.Where(i => i.RequestID == id); return View(requestDetails.ToList()); } 当访问时,它将加载特定ID的所有记录(在本
public ActionResult DetailsList(short? id)
{
var requestDetails = db.RequestDetails.Where(i => i.RequestID == id);
return View(requestDetails.ToList());
}
当访问时,它将加载特定ID的所有记录(在本例中,请求号为24)
我正试图将其作为部分视图嵌入到我的主请求页面中,如下所示:
@model CollectionMGR.Models.Request
@{
ViewBag.Title = "Collection Creation Request Details";
}
<h2>Details</h2>
<div>
<h4>Request Overview</h4>
<hr /><p>You can view detailed info about your request here</p>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.User)
</dt>
<dd>
@Html.DisplayFor(model => model.User)
</dd>
<dt>
@Html.DisplayNameFor(model => model.AppName)
</dt>
<dd>
@Html.DisplayFor(model => model.AppName)
</dd>
<dt>
@Html.DisplayNameFor(model => model.PackageName)
</dt>
<dd>
@Html.DisplayFor(model => model.PackageName)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Action)
</dt>
<dd>
@Html.DisplayFor(model => model.Action)
</dd>
<dt>
@Html.DisplayNameFor(model => model.CollectionID)
</dt>
<dd>
@Html.DisplayFor(model => model.CollectionID)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Computers)
</dt>
<dd>
@Html.DisplayFor(model => model.Computers)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Disposed)
</dt>
<dd>
@Html.DisplayFor(model => model.Disposed)
</dd>
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.RequestID }) |
@Html.ActionLink("Back to List", "Index")
<h3>@ViewBag.DetailStatus</h3>
@if (ViewBag.DetailStatus == "No detailed records found")
{
<p>no stuff to show</p>
}
else
{
<p>would be displaying stuff here</p>
<div>
<p><i>Start of Partial View</i></p>
@Html.Partial("../RequestDetails/DetailsList", Model.RequestID)
<p><i>End of Partial View</i></p>
@Html.ActionLink("Edit", "Edit", new { id = Model.RequestID }) |
@Html.ActionLink("Back to List", "MemberList")
</div>
}
我太困惑了!我可以整天访问DetailsList端点,但当我尝试将其部分渲染为局部视图时,它会崩溃吗?哇
以下是RequestDetails/DetailsList
端点的代码:
@model IEnumerable<CollectionMGR.Models.RequestDetail>
@{
ViewBag.Title = "_RequestDetails";
}
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.RequestID)
</th>
<th>
@Html.DisplayNameFor(model => model.HostName)
</th>
<th>
@Html.DisplayNameFor(model => model.ResourceID)
</th>
<th>
@Html.DisplayNameFor(model => model.Request.User)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.RequestID)
</td>
<td>
@Html.DisplayFor(modelItem => item.HostName)
</td>
<td>
@Html.DisplayFor(modelItem => item.ResourceID)
</td>
<td>
@Html.DisplayFor(modelItem => item.Request.User)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.RequestDetailsID }) |
@Html.ActionLink("Details", "Details", new { id = item.RequestDetailsID }) |
@Html.ActionLink("Delete", "Delete", new { id = item.RequestDetailsID }) |
@Html.ActionLink("View Request", "../Request/Details/", new { id = item.RequestID })
</td>
</tr>
}
</table>
@model IEnumerable
@{
ViewBag.Title=“\u请求详细信息”;
}
@DisplayNameFor(model=>model.RequestID)
@Html.DisplayNameFor(model=>model.HostName)
@DisplayNameFor(model=>model.ResourceID)
@DisplayNameFor(model=>model.Request.User)
@foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.RequestID)
@DisplayFor(modelItem=>item.HostName)
@DisplayFor(modelItem=>item.ResourceID)
@DisplayFor(modelItem=>item.Request.User)
@ActionLink(“编辑”,“编辑”,新的{id=item.RequestDetailsID})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.RequestDetailsID})|
@ActionLink(“删除”,“删除”,新的{id=item.RequestDetailsID})|
@ActionLink(“查看请求“,”./Request/Details/”,新的{id=item.RequestID})
}
我确信堆栈跟踪是有帮助的,但我不知道在谈论类型转换时它意味着什么。我试图部分渲染的视图在我手动导航到它时工作得很好,所以我不确定为什么它会失败
谢谢你的指点,我已经看过了其他类似主题的例子,只是不明白而已 错误是不言自明的。您的
DetailsList
视图被强类型化为IEnumerable
。因此,它期望将RequestDetail
对象的集合传递给它。但是在代码中,您使用Html.Partial
方法调用此视图,并将RequestID
属性传递给它,该属性是int
值。您得到错误是因为您传递的内容与预期的不同
查看您的代码,我发现您有一个操作方法DetailsList
,它获取DetailsList
视图所需的数据并传递到该视图。因此,在主视图中,不应该调用Html.Partial
方法,而应该调用Html.Action
helper方法
<p><i>Start of Partial View(Actually the Action method) </i></p>
@Html.Action("DetailsList",Model.RequestID)
<p><i>End of Partial View</i></p>
局部视图的开始(实际上是动作方法)
@Action(“DetailsList”,Model.RequestID)
局部视图结束
当razor执行主视图的代码时,它将执行此子操作
DetailsList
,并将其结果添加到主视图输出中。错误是不言自明的。您的部分视图强类型为IEnumerable
,但在主视图中,您只传递RequestID
。确保传递了正确的值。好的,我将代码换掉了,但是现在得到了这个错误在控制器“CollectionMGR.Controllers.RequestsController”上找不到公共操作方法“DetailsList”。'该操作来自我的项目中的其他控制器。有没有一种方法可以直接从这个控制器和视图调用另一个动作?事实上,我刚刚把所有的东西都放到了一个控制器中,它工作得非常好,非常感谢!哪个控制器定义了DetailsList
?如果是不同的操作,可以使用where指定操作方法名称和控制器名称@Html.Action(“DetailsList”、“YourOtherControllerName”、Model.RequestID)
<p><i>Start of Partial View(Actually the Action method) </i></p>
@Html.Action("DetailsList",Model.RequestID)
<p><i>End of Partial View</i></p>