【问题标题】:How to call a child action in the Home controller如何在 Home 控制器中调用子操作
【发布时间】:2014-06-26 13:40:08
【问题描述】:

这是我的控制器,我的部分视图是 ProducDetails,当我像 @Html.Action("DisplayProduct", product) 这样在默认 Home 控制器中调用子操作方法时,我知道它无法工作吗? 公共类 ProductController : 控制器 { // // 获取:/产品/

    public ActionResult Index()
    {
        List<Product> products = new List<Product>()
        {
            new Product { Id =1, Name ="Product 1", Description ="Description 1", Price = 10m},
            new Product { Id =2, Name ="Product 2", Description ="Description 2", Price = 20m},
            new Product { Id =3, Name ="Product 3", Description ="Description 3", Price = 30m},
            new Product { Id =4, Name ="Product 4", Description ="Description 4", Price = 40m}
        };
        return View(products);
    }

    [ChildActionOnly]
    public ActionResult DisplayProduct(Product product)
    {

        return PartialView("ProductDetails", product);
   }
}

}

【问题讨论】:

    标签: c# asp.net-mvc-4


    【解决方案1】:

    Html.Action 期望在第二个参数而不是您的自定义模型中具有路由值。这就是为什么如果您立即致电@Html.Action("DisplayProduct", product),您将不会收到您的产品对象。

    如果你想克服它,你需要在调用 Html.Action 时发送路由值而不是你的对象。您可以将此示例与匿名对象一起使用:

    @Html.Action("DisplayProduct", new { product.Id, product.Name, product.Description, product.Price } ) ; 
    

    编辑:

    如果您除了返回到“ProductDetails”视图之外的任何操作,为什么不立即使用Html.RenderPartial 而不是使用Html.Action

    @{
        Html.RenderPartial("ProductDetails", product) ; 
    }
    

    【讨论】:

    • 我将此值作为列表返回,例如 @foreach(var product in Model){ Html.Action("DisplayProduct", new { product.Id, product.Name, product.Description, product.价钱 } ) ;并且当我调试它时模型为空有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多