【问题标题】:Return a partial view from a controller?从控制器返回部分视图?
【发布时间】:2014-03-27 02:06:41
【问题描述】:

所以,我们可以像这样从控制器返回部分视图:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your app description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }

        public PartialViewResult Address()
        {
            Address a = new Address 
            { 
                Line1 = "111 First Ave N.", 
                Line2 = "APT 222", 
                City = "Miami", 
                State = "FL", 
                Zip = "33133" 
            };

            return PartialView(@"~/Views/Home/_Address.cshtml", a);
        }
    }
}

但是,我应该如何使用返回的局部视图?我在 Views/Home 下创建了 _Address.cshtml,如下所示:

@model MvcApplication1.Models.Address

<p>
    This is a partial view of address.
</p>
<p>
  @Model.City
</p>

并且,在 Views/Home/Contact.cshtml 的末尾,我添加了这一行:

@Html.Partial(@"~/Views/Home/_Address.cshtml")

我希望看到我的地址所在的城市,但它没有出现。我很困惑。

【问题讨论】:

  • 感谢您格式化我的代码。我尝试对其进行格式化,但它拒绝按我想要的方式格式化。
  • 其实很简单。只需选择您的代码文本,然后在编辑器中点击{} 按钮,或者确保所有代码都缩进 4 个空格。你也可以用反引号包围内联代码`code`
  • 好的,谢谢。下次试试。

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


【解决方案1】:

当部分采用与您包含它的方法不同的模型时,您需要使用采用模型参数并为视图提供模型的重载。默认情况下,它使用与包含视图相同的模型。通常,如果它位于不同的非共享文件夹中,您只需要该路径。如果它在同一个控制器的文件夹中,只使用名称就可以了。

@Html.Partial("_Address", Model.Address)

另一方面,如果您问我如何从页面中包含的操作中获取部分视图,那么您想使用Action 方法而不是Partial 方法。

@Html.Action("Address")

编辑

要完成部分工作,您需要将 Contact 模型传递给联系人视图。

public ActionResult Contact()
{
     var contact = new Contact
     {
        Address = new Address
                  { 
                       Line1 = "111 First Ave N.",
                       Line2 = "APT 222",
                       City = "Miami",
                       State = "FL",
                       Zip = "33133"
                  }
     }

     return View(contact);
}

【讨论】:

  • @Stack0verflow - 这是因为您没有将 Contact 模型传递给父页面。
  • 但我将@model MvcApplication1.Models.Address 传递给我的_Address.cshtml 部分视图。
  • 但是你已经把我的局部视图操作方法排除在外了。
  • @Stack0verflow - 这就是第二个选项,在视图中呈现动作的地方。如果你想包含不同动作的结果(部分视图),这是你想要使用的选项。
  • 啊,这就是我们如何使用从动作方法返回的局部视图。非常感谢。是的,第二个选项有效:@Html.Action("Address")
【解决方案2】:

为您演示:

    public ActionResult Update(Demo model)
{
    var item = db.Items.Where(item => item.Number == model.Number).First();
    if (item.Type=="EXPENSIVE")
    {
        return PartialView("name Partial", someViewModel);
    }
}

【讨论】:

  • 谢谢,假设我的局部视图名称是 _Address.cshtml,我应该如何在我的 Contact.cshtml 视图中使用这个局部视图?
  • 如果你可以在视图中调用partial,你可以使用:@{ Html.RenderPartial("_Test"); }
猜你喜欢
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 2017-02-13
  • 1970-01-01
相关资源
最近更新 更多