【发布时间】:2017-05-01 21:36:52
【问题描述】:
我在理解局部视图的 Partial、RenderPartial 和 RenderAction 以及要包含哪些参数时遇到了一些麻烦。当我自己运行局部视图时,它可以工作。当我在具有相同@model 的 AccountHistory 中运行 RenderAction 时,它可以工作,但如果我尝试 Partial 或 RenderPartial,它会将数据返回为 null。除了AccountHistory 之外,我无法让这些在任何页面的布局中工作。我的猜测是我没有通过正确的控制器发送它。我该如何解决这个问题?
这是我的代码:
AccountHistoryVM
namespace Infotech.Coverpools.Portal.Tintaglia.Web.Models
{
public class AccountHistoryVM
{
public IEnumerable<CustLedgerEntry> Records { set; get; }
public IEnumerable<CustAcctSummary> Summary { set; get; }
public DateTime? LastUpdatedDate { set; get; }
}
}
CustLedgerEntry 控制器
namespace Infotech.Coverpools.Portal.Tintaglia.Web.Controllers
{
public class CustLedgerEntryController : Controller
{
private TintagliaContext db = new TintagliaContext();
public ActionResult CustAcctSummary(AccountHistoryVM AcctSum)
{
var dealerId = db.UserProfiles.Where(d => d.UserName.Equals(User.Identity.Name)).Select(d => d.CustomerId).FirstOrDefault();
AcctSum = new AccountHistoryVM();
var OpenOrders = db.CustAcctSummaries.FirstOrDefault(m => m.NoOrders != null);
AcctSum.Summary = db.CustAcctSummaries.ToList().Where(x => x.CustomerNo_ == dealerId);
var datetoweb = db.CustLedgerEntries.FirstOrDefault(m => m.DatetoWebSales != null);
AcctSum.LastUpdatedDate = datetoweb.DatetoWebSales;
return PartialView(AcctSum);
}
}
}
CustAcctSummary
public ActionResult CustAcctSummary(AccountHistoryVM AcctSum)
{
var dealerId = db.UserProfiles.Where(d => d.UserName.Equals(User.Identity.Name)).Select(d => d.CustomerId).FirstOrDefault();
AcctSum = new AccountHistoryVM();
var OpenOrders = db.CustAcctSummaries.FirstOrDefault(m => m.NoOrders != null);
AcctSum.Summary = db.CustAcctSummaries.ToList().Where(x => x.CustomerNo_ == dealerId);
var datetoweb = db.CustLedgerEntries.FirstOrDefault(m => m.DatetoWebSales != null);
AcctSum.LastUpdatedDate = datetoweb.DatetoWebSales;
return PartialView(AcctSum);
}
CustAcctSummary.cshtml(部分)
@model Infotech.Coverpools.Portal.Tintaglia.Web.Models.AccountHistoryVM
<div id="AccountSummaryContainer">
<h2>Account Summary</h2>
<div id="AccountSummary">
@if (Model.Summary != null)
{
foreach (var item in Model.Summary)
{
<p class="label">Open Orders </p><p class="value">@Html.DisplayFor(m => item.NoOrders)</p>
<p class="label">Outstanding Orders </p><p class="value">@Html.DisplayFor(m => item.OutstandingOrders)</p>
<p class="label">TOTAL BALANCE DUE </p><p class="value">@Html.DisplayFor(m => item.BalanceDue)</p>
<p class="label">Credit Limit </p><p class="value"> @Html.DisplayFor(m => item.CreditLimit)</p>
<p class="label">Amount Past Due </p><p class="value"> @Html.DisplayFor(m => item.Balance)</p>
}
}
</div>
<div class="updateDate">
@Html.DisplayFor(model => model.LastUpdatedDate)
</div>
</div>
_Layout.cshtml(各种尝试浓缩)
@{Html.RenderAction("CustAcctSummary", "CustAccountSummary");}'
//works in AccountHistory, but get the following when I try to go to a difference page (eg Home/Index): A public action method 'CustAcctSummary' was not found on controller 'Infotech.Coverpools.Portal.Tintaglia.Web.Controllers.HomeController'.
@{Html.RenderAction("CustAcctSummary", Model.Summary);}
Error CS1973 'HtmlHelper<dynamic>' has no applicable method named 'RenderAction' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax. Infotech.Coverpools.Portal.Tintaglia.Web F:\sites\OnlineOrder\Coverpools Dealer Portal\Infotech Coverpools Portal Tintaglia\Source\Infotech.Coverpools.Portal.Tintaglia.Web\Views\Shared\_Layout.cshtml 142 Active
@Html.Partial("CustAcctSummary");
//Returns blank Account Summary in AccountHistory: Other pages: The partial view 'CustAcctSummary' was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Home/CustAcctSummary.aspx
~/Views/Home/CustAcctSummary.ascx
~/Views/Shared/CustAcctSummary.aspx
~/Views/Shared/CustAcctSummary.ascx
~/Views/Home/CustAcctSummary.cshtml
~/Views/Home/CustAcctSummary.vbhtml
~/Views/Shared/CustAcctSummary.cshtml
~/Views/Shared/CustAcctSummary.vbhtml
@Html.Partial("/Views/CustLedgerEntry/CustAcctSummary");
//Returns blank Account Summary in AccountHistory: Other Pages: The partial view '/Views/CustLedgerEntry/CustAcctSummary' was not found or no view engine supports the searched locations. The following locations were searched:
/Views/CustLedgerEntry/CustAcctSummary
【问题讨论】:
标签: asp.net-mvc-4 razor partial-views