0

众所周知RenderAction(),它属于:

  • Asp.net MVC 1 期货或
  • Asp.net MVC 2 测试版 2

并允许我们在另一个视图或部分视图中呈现动作结果。

描述

  1. RenderAction()您有一个使用帮助器显示多个局部视图的视图。
  2. 至少两个部分视图<form>可能通过使用Html.BeginForm()该回发到原始视图来呈现。
  3. 回发不是通过 Ajax 调用执行的
  4. 回发数据在表单 POST 上进行验证。

问题

当其中一种形式被回发时,另一种形式呈现为invalid

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

4

1 回答 1

1

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

关于前缀。第一种方法是有两个属性,调用 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) %>

也就是说,您使用模型中传递的前缀设置字段名称。

当然,您可以在细节上有所不同。

于 2009-11-26T19:08:10.087 回答