gpt4 book ai didi

asp.net-mvc-3 - MVC3 - 4 使用局部 View 的多个表单

转载 作者:行者123 更新时间:2023-12-02 22:20:43 24 4
gpt4 key购买 nike

因此,我正在创建一个管理页面,我想在其中放置多个表单。因此,我尝试使用 Partial View 和 RenderAction 来实现。

我的管理索引 View :

@model Rad.ViewModels.AdminViewModel
@{
ViewBag.Title = "Admin";
}

<h2>Admin</h2>

<div>
@{ Html.RenderAction("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"/>
}

我的管理 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com