1つのビューに複数のHttp.RenderAction()
-
05-07-2019 - |
質問
ご存じのとおり、RenderAction()
は次のいずれかの一部です。
- Asp.net MVC 1先物または
- Asp.net MVC 2 Beta 2
また、アクション結果を別のビューまたは部分ビュー内にレンダリングできます。
説明
-
<form>
ヘルパーを使用して複数の部分ビューが表示されているビューがあります。 - 少なくとも2つの部分ビューが
Html.BeginForm()
をレンダリングします。おそらくform
を使用して、元のビューにポストバックします。 - ポストバックは Ajax呼び出しを介して実行されません
- ポストバックデータはフォーム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) %>
つまり、モデルに渡されたプレフィックスでフィールド名を設定します。
もちろん、これを詳細に変えることができます。
所属していません StackOverflow