我有一个观点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中可以实现吗?
答案 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)