0

ご存知のとおりRenderAction()、次のいずれかの部分です。

  • Asp.netMVC1先物または
  • Asp.net MVC 2 Beta 2

また、アクション結果を別のビューまたは部分ビュー内にレンダリングできます。

説明

  1. RenderAction()ヘルパーを使用して複数の部分ビューが表示されたビューがあります。
  2. 少なくとも2つの部分的なビューは、<form>おそらくHtml.BeginForm()元のビューへのポストバックを使用してレンダリングします。
  3. ポストバックAjax呼び出しでは実行されません
  4. ポストバックデータは、フォームPOSTで検証されます。

問題

フォームの1つがポストバックされると、もう1つは無効としてレンダリングされます。

誰かがこのパターンを使用して解決しましたか?どういうわけか、どちらformがポストバックを実行したかを知る必要があり、その1つだけがPOSTデータを検証する必要があります。他の人は、検証を無視するか、通常のHttpVerb.Getアクション処理を実行する必要があります。

4

1 に答える 1

1

フォームに非表示のフィールドを用意して、どれを示すかを示します。または、プレフィックスをパーシャルに渡し、フォームの各要素に追加します。

プレフィックスについて。最初の方法は、Html.RenderPartial( "partial"、Model.Data1 / 2.WithPrefix( "data1"))を呼び出す2つのプロパティを持つことです。

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 {}
}

2番目の方法は同じですが、2つのアクションパラメーターを使用します。

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

部分ビューでは、

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

つまり、モデルで渡されたプレフィックスを使用してフィールド名を設定します。

もちろん、これを詳細に変えることができます。

于 2009-11-26T19:08:10.087 に答える