单个视图中有多个Http.RenderAction()

时间:2009-11-26 17:26:27

标签: asp.net-mvc renderaction

众所周知,RenderAction()是其中一部分:

  • Asp.net MVC 1期货或
  • Asp.net MVC 2 Beta 2

允许我们在另一个视图或局部视图中渲染动作结果。

描述

  1. 您有一个使用RenderAction()帮助程序显示多个部分视图的视图。
  2. 至少有两个部分视图可能会使用回发到原始视图的<form>来呈现Html.BeginForm()
  3. 通过Ajax调用
  4. 执行回发
  5. 回复数据在表单POST验证。
  6. 问题

    当其中一个表单被回发后,另一个表单呈现为无效

    是否有人使用此模式并解决了它?我们应该知道哪个form执行了回发,只有那个应该验证其POST数据。其他人应该忽略验证或执行常规的HttpVerb.Get操作处理。

1 个答案:

答案 0 :(得分:1)

在表单中有一个隐藏字段以指示哪一个。或者,将前缀传递给partial并附加到表单中的每个元素。

关于前缀。第一种方法是有两个属性,调用Html.RenderPartial(“partial”,Model.Data1 / 2.WithPrefix(“data1”))。

public class FormModel
{
   public string Prefix { get; set; }
}

public class FormData
{
   public FormModel Data1 { get; set; }
   public FormModel Data2 { get; set; }
}

public ActionResult HandlePost(FormData data)
{
   if (data.Data1 != null) {} else {}
}

第二种方法是相同的,但使用两个动作参数。

public ActionResult HandlePost(FormModel data1, FormModel data2)
{
   if (data1 != null) {} else {}
}

在局部视图中

<%= Html.TextBox(Model.Prefix + ".FormModelField", Model.FormModelField) %>

即,您使用模型中传递的前缀设置字段名称。

当然,您可以在详细信息中对此进行更改。