因此,我正在创建一个管理页面,我想在其中放置多个表单。因此,我尝试使用 Partial View 和 RenderAction 来实现。
我的管理索引 View :
@model Rad.ViewModels.AdminViewModel
@{
ViewBag.Title = "Admin";
}
<h2>Admin</h2>
<div>
@{ Html.RenderAction("AddProduct"); }
</div>
我的部分观点:
@model Rad.ViewModels.AdminAddProductViewModel
@using (Html.BeginForm("AddProduct", "Admin"))
{
<h1>@Html.LabelFor(model => model.Name)</h1>
@Html.TextBoxFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
<input type="submit" value="Add"/>
}
我的管理 Controller :
public class AdminController : Controller
{
//
// GET: /Admin/
public ActionResult Index()
{
return View();
}
public ActionResult AddProduct()
{
return PartialView();
}
[HttpPost]
public ActionResult AddProduct(AdminAddProductViewModel data)
{
if (ModelState.IsValid)
{
}
return View("Index");
}
}
问题出在 AddProduct 的 HttpPost 版本上。如果我将其保留为 return View("Index"),它将进入无限循环。但是,如果我返回 PartialView(data),它会正确显示错误,但周围没有索引 View 。因此,它仅显示部分 View 。有没有办法在一个页面上有多个表单并将服务器端验证返回到页面?
最佳答案
好的,我能够解决这个问题:
管理主索引页面:
@model Rad.ViewModels.AdminViewModel
@{
ViewBag.Title = "Admin";
}
<h2>Admin</h2>
<div>
@Html.Partial("AddProduct", Model.AddProduct)
</div>
添加产品部分 View :
@model Rad.ViewModels.AdminAddProductViewModel
@using (Html.BeginForm("AddProduct", "Admin"))
{
<h1>@Html.LabelFor(model => model.Name)</h1>
@Html.TextBoxFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
<input type="submit" value="Add"/>
}
简单的AdminAddProductViewModel:
public class AdminAddProductViewModel
{
[DisplayName("Add Product:")]
[Required]
[StringLength(50)]
[RegularExpression(@"^[a-zA-Z0-9\s]+$")]
public string Name { get; set; }
}
包含AdminViewModel:
public class AdminViewModel
{
public AdminAddProductViewModel AddProduct { get; set; }
public AdminViewModel()
{
AddProduct = new AdminAddProductViewModel();
}
}
管理 Controller :
public ActionResult Index()
{
AdminViewModel data = new AdminViewModel();
return View(data);
}
[HttpGet]
public ActionResult Index(AdminViewModel data)
{
return View(data);
}
[HttpPost]
public ActionResult AddProduct(AdminAddProductViewModel data)
{
AdminViewModel admin = new AdminViewModel();
admin.AddProduct = data;
if (ModelState.IsValid)
{
}
return View("Index", admin);
}
现在,我知道我正在谈论多种表单,并且此处仅显示一种表单,但如果您想向其中添加另一种表单,只需创建另一个部分 View 、另一个 subview 模型,然后将该 subview 模型添加到AdminViewModel。
关于asp.net-mvc-3 - MVC3 - 4 使用部分 View 的多种形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13746697/