返回视图中的部分视图

时间:2018-08-16 20:38:08

标签: c# asp.net-mvc

我有一个观点Index.cshtml

@{
    ViewBag.Title = "Index";
}

<h2>Add</h2>

<p>Begin building a question set by clicking the button below.</p>
<input type="button" value="Create" onclick="location.href='@Url.Action("Product", "Add")'" />

在我的AddController中调用Product动作的

public ActionResult Product()
{
   ViewBag.Partial = true;
   return PartialView("Product");
}

我想要实现的是:

当用户加载页面时,隐藏了我的局部视图(Product.cshtml)中的内容,但是当他们单击“创建”按钮时,该按钮在我的Product中调用AddController操作然后,我想将Product.cshtml部分视图加载到我的Index.cshtml中,以便后者仍然具有其原始内容,但是这次是将Product.cshtml注入其中。

目前,它仅返回部分视图,而不是两个视图。

这在MVC中可以实现吗?

2 个答案:

答案 0 :(得分:4)

是的,基本上,您需要通过AJAX调用获取PartialView并将其加载到页面中。使用jQuery最简单

您可以使用简单的JavaScript来实现。

在按钮onclick中,输入加载函数的名称,例如onclick="partialLoad()"

在页面上放入div,例如id

然后输入您的脚本:

<div id="loadFrame"></div>

答案 1 :(得分:0)

我的建议如下。

将Products.cshtml移至Views / Shared / EditorTemplates或DisplayTemplates目录

具有一个填充的ViewModel,其中包含要传递到视图和从视图传递的产品的列表。

因此:

HomeController.cs

public ActionResult Index()
{
    var model = new ProductViewModel();

    return View(model);
}

[HttpPost]
public ActionResult Index(ProductViewModel model)
{
    if (model == null)
    {
        model = new ProductViewModel();
    }
    if (model.Products == null)
    {
        model.Products = new List<Product>();
    }
    model.Products.Add(new Product { Name = "Some Product", Amount = model.Products.Count + 1});

    return View(model);
}

ProductViewModel.cs

public class ProductViewModel
{
    public List<Product> Products { get; set; }
}

Index.cshtml

@model DynamicViewExample.Controllers.ProductViewModel
@{
    ViewBag.Title = "About";
}

@using (Html.BeginForm())
{
    <h2>Add</h2>


    @Html.DisplayFor(m => m.Products)

    <p>Begin building a question set by clicking the button below.</p>
    <input type="submit" value="Add Product" />
}

最后是DisplayTemplate
Product.cshtml

@model DynamicViewExample.Models.Product
<div>
    @Html.HiddenFor(x => x.Name)
    @Html.HiddenFor(x => x.Amount)
    @Html.DisplayFor(x => x.Name)
    @Html.DisplayFor(x => x.Amount)
</div>

之所以必须包含HiddenFor属性,是为了使Products集合能够填充,否则您将一直得到一个空集合。

同样,这是一个显示模板,将返回以下结果

  

添加

     

某些产品1
  某些商品2
  某些商品3
  某些产品4
  某些商品5
  单击下面的按钮开始构建问题集。

我希望这可以引导您进入希望的方向

祝你好运
盖维·施耐德(Gawie Schneider)