質問

ご存じのとおり、RenderAction()は次のいずれかの一部です。

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

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

説明

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

問題

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

誰でもこのパターンを使用して解決しましたか?どのHttpVerb.Getがポストバックを実行し、そのPOSTデータを検証する必要があるのはその<=>のみである必要があります。その他は、検証を無視するか、通常の<=>アクション処理を実行する必要があります。

役に立ちましたか?

解決

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

プレフィックスについて。最初の方法は、Html.RenderPartial(<!> quot; partial <!> quot ;, Model.Data1 / 2.WithPrefix(<!> quot; data1 <!> quot;))を呼び出す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) %>

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top