asp.net-mvc-3 - MVC3 - 4 使用部分 View 的多种形式

标签 asp.net-mvc-3 forms asp.net-mvc-4 partial-views renderaction

因此,我正在创建一个管理页面,我想在其中放置多个表单。因此,我尝试使用 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/

相关文章:

c# - 多个开发人员使用具有不同设置的单个 web.config

jquery - 简单的 JQuery Ajax 帖子

asp.net-mvc-3 - 如何在asp net mvc3中将值从部分 View 传递到父 View

PHP:将类实例传递到另一个页面?

javascript - jquery slider 未捕获类型错误: undefined is not a function

c# - MVC 4 列表模型绑定(bind)如何工作?

asp.net - 如何使用 MVC 3 启用/使用跨源资源共享?

javascript - 这段代码可以优化吗?

JavaScript 登录表单未验证

javascript - 将 DataSourceRequest 对象从 JavaScript 函数发送到 MVC Controller 端点