要从控制器返回局部视图吗?

问题描述 投票:10回答:2

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

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

但是,我应该如何使用返回的局部视图?我在“视图/主页”下创建了_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")

而且我希望看到我住址的城市,但它没有显示。我很困惑。

c# asp.net-mvc asp.net-mvc-4 razor
2个回答
8
投票

当分部采用与您要包含的方法不同的模型时,您需要使用接受模型参数并为视图提供模型的重载。默认情况下,它使用与包含视图相同的模型。通常,仅当路径位于其他非共享文件夹中时,才需要该路径。如果在同一控制器的文件夹中,则仅使用名称即可解决问题。

@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);
}

4
投票

为您演示:

    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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.