Asp.net mvc 3 MVC3-4使用局部视图的多表单

Asp.net mvc 3 MVC3-4使用局部视图的多表单,asp.net-mvc-3,forms,asp.net-mvc-4,partial-views,renderaction,Asp.net Mvc 3,Forms,Asp.net Mvc 4,Partial Views,Renderaction,所以,我正在创建一个管理页面,我想把多个表单放在上面。所以,我试着使用局部视图和渲染 我的管理员索引视图: @model Rad.ViewModels.AdminViewModel @{ ViewBag.Title = "Admin"; } <h2>Admin</h2> <div> @{ Html.RenderAction("AddProduct"); } </div> 问题在于AddProduct的HttpPost版本。如果我将其保留为返回

所以,我正在创建一个管理页面,我想把多个表单放在上面。所以,我试着使用局部视图和渲染

我的管理员索引视图:

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

<h2>Admin</h2>

<div>
@{ Html.RenderAction("AddProduct"); }
</div>
问题在于AddProduct的HttpPost版本。如果我将其保留为返回视图(“索引”),它将进入一个无限循环。但是,如果我返回PartialView(数据),它会正确地显示错误,但周围没有索引视图。因此,它只显示局部视图。有没有一种方法可以在一个页面上有多个表单,并将服务器端验证返回到该页面?

您是否尝试过ajax.beginform()? 命名局部视图周围的div,并将UpdateTargetId设置为该名称

然后查询将替换旧的div


别忘了参考ajax的java脚本库

好的,我能够解决这个问题:

管理员主索引页:

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

<h2>Admin</h2>

<div>
@Html.Partial("AddProduct", Model.AddProduct)
</div>
包含AdminViewModel:

public class AdminAddProductViewModel
{
    [DisplayName("Add Product:")]
    [Required]
    [StringLength(50)]
    [RegularExpression(@"^[a-zA-Z0-9\s]+$")]
    public string Name { get; set; }
}
public class AdminViewModel
{
    public AdminAddProductViewModel AddProduct { get; set; }

    public AdminViewModel()
    {
        AddProduct = new AdminAddProductViewModel();
    }
}
管理员控制器:

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

现在,我知道我说的是多个表单,在这里只显示一个表单,但是如果您想添加另一个表单,只需创建另一个局部视图,另一个子视图模型,然后将该子视图模型添加到AdminViewModel。

我想在服务器端执行此操作。这不是服务器端吗?Ajax请求将发送到您的控制器,该控制器应该是服务器端的,而不是?是的,它将通过服务器进行检查,但是如果JS被关闭,则不会进行调用。
public class AdminViewModel
{
    public AdminAddProductViewModel AddProduct { get; set; }

    public AdminViewModel()
    {
        AddProduct = new AdminAddProductViewModel();
    }
}
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);
    }