Asp.net mvc 4 使用带有数据的局部视图进行布局

Asp.net mvc 4 使用带有数据的局部视图进行布局,asp.net-mvc-4,razor,partial-views,Asp.net Mvc 4,Razor,Partial Views,我在理解局部视图的“部分”、“渲染部分”和“渲染”以及要包含哪些参数方面遇到了一些困难。当我单独运行局部视图时,它会工作。当我在AccountHistory中运行RenderAction时,它具有相同的@model,但如果我尝试Partial或RenderPartial,它会将数据返回为null。除了AccountHistory,我无法在任何页面的布局中使用这些内容。我猜我没有通过正确的控制器发送。我该如何解决这个问题 这是我的密码: AccountHistoryVM namespace Inf

我在理解局部视图的“部分”、“渲染部分”和“渲染”以及要包含哪些参数方面遇到了一些困难。当我单独运行局部视图时,它会工作。当我在AccountHistory中运行RenderAction时,它具有相同的@model,但如果我尝试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; }
    }
}
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
帐户摘要
@如果(Model.Summary!=null)
{
foreach(模型摘要中的var项)
{
未结订单

@Html.DisplayFor(m=>item.NoOrders)

未结清订单

@Html.DisplayFor(m=>项目.未结清订单)

到期总余额

@Html.DisplayFor(m=>item.BalanceDue)

信贷限额

@Html.DisplayFor(m=>item.CreditLimit)

逾期金额

@Html.DisplayFor(m=>item.Balance)

} } @DisplayFor(model=>model.lastUpdateDate)
\u Layout.cshtml(通过各种尝试压缩)

@{Html.RenderAction(“CustAcctSummary”、“CustAccountSummary”);}
//在AccountHistory中工作,但当我尝试转到差异页面(例如主页/索引)时,会得到以下信息:在控制器“Infotech.Coverpools.Portal.Tintaglia.Web.Controllers.HomeController”上未找到公共操作方法“CustAcctSummary”。
@{Html.RenderAction(“CustAcctSummary”,Model.Summary);}
错误CS1973“HtmlHelper”没有名为“RenderAction”的适用方法,但似乎有一个同名的扩展方法。无法动态调度扩展方法。考虑在不使用扩展方法语法的情况下强制转换动态参数或调用扩展方法。Infotech.Coverpools.Portal.Tintaglia.Web F:\sites\OnlineOrder\Coverpools经销商门户\Infotech Coverpools Portal Tintaglia\Source\Infotech.Coverpools.Portal.Tintaglia.Web\Views\Shared\\u Layout.cshtml 142激活
@Html.Partial(“CustAcctSummary”);
//返回AccountHistory:其他页面中的空白帐户摘要:未找到部分视图“CustAcctSummary”,或者没有视图引擎支持搜索的位置。搜索了以下地点:
~/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”);
//返回AccountHistory:其他页面中的空白帐户摘要:未找到部分视图“/Views/CustLedgerEntry/CustAcctSummary”,或者没有视图引擎支持搜索的位置。搜索了以下地点:
/视图/保管租赁/保管租赁

更改您的操作,如:

    public ActionResult CustAcctSummary()

    {
        var AcctSum = new AccountHistoryVM();

        var dealerId = db.UserProfiles.Where(d => d.UserName.Equals(User.Identity.Name)).Select(d => d.CustomerId).FirstOrDefault();

        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);
    }
然后

区域是MVC应用程序中不使用主控制器、操作和视图的部分;相反,它们在项目目录中的特定子文件夹中模拟此结构。在Visual Studio中,您可以通过右键单击项目文件并选择“添加->区域”来构建一个区域

area=”“
表示控制器位置为主控制器文件夹(外侧区域)


希望它能帮助你。

改变你的行为,比如:

    public ActionResult CustAcctSummary()

    {
        var AcctSum = new AccountHistoryVM();

        var dealerId = db.UserProfiles.Where(d => d.UserName.Equals(User.Identity.Name)).Select(d => d.CustomerId).FirstOrDefault();

        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);
    }
然后

区域是MVC应用程序中不使用主控制器、操作和视图的部分;相反,它们在项目目录中的特定子文件夹中模拟此结构。在Visual Studio中,您可以通过右键单击项目文件并选择“添加->区域”来构建一个区域

area=”“
表示控制器位置为主控制器文件夹(外侧区域)


希望这对您有所帮助。

这两个问题都给了我以下错误:路径“/CustLedgerEntry/AccountHistory”的控制器未找到或未实现IController What is area?您能给控制器显示名称空间和操作吗?@Josh McGeeI编辑了我的问题以包含控制器。对不起,我以为我已经包括了这个。对不起,我的第一个答案。我更新了我的答案。@Josh McGee就是他做的。非常感谢。我猜包含所有代码会有帮助:-)我仍然很好奇什么是“面积”?看起来我在这里放置了任何东西,对吗?这两个都给了我以下错误:路径“/CustLedgerEntry/AccountHistory”的控制器未找到或未实现IController What is area?你能给你的控制器显示名称空间和操作吗?@Josh McGeeI编辑了我的问题以包含控制器。对不起,我以为我已经包括了这个。对不起,我的第一个答案。我更新了我的答案。@Josh McGee就是他做的。非常感谢。我猜包含所有代码会有帮助:-)我仍然很好奇什么是“面积”?我好像在这里放了什么东西,对吗?
@{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
    public ActionResult CustAcctSummary()

    {
        var AcctSum = new AccountHistoryVM();

        var dealerId = db.UserProfiles.Where(d => d.UserName.Equals(User.Identity.Name)).Select(d => d.CustomerId).FirstOrDefault();

        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);
    }
 @{Html.RenderAction("CustAcctSummary", "CustLedgerEntry", new { area = "" });}