0

書き直されているアプリケーションでは、元々特定のフォームにドロップダウンが含まれており、ユーザーは他の場所での計算で入力を使用する方法について2つの主要なオプションのいずれかを選択しました。

要件により、このドロップダウンの代わりに、インターフェイスは同じページに上下に表示される2つの同じフォームを備えている必要があります。パラメータまたは非表示の値は、前述のオプションが各フォームに設定されているかどうかを判断して、2つのオプションのそれぞれに1つのフォームが存在するようにすることです。これにより、モデルにブール値が設定されます。

フォームの両方の外観に同じ部分ビューを使用して、初期化中の違いを定義しています。ただし、まだ1つの特定の問題があります。一方のフォームに検証エラーがある場合、両方に表示されます。これを防ぐための最良の方法は何ですか?

諦めてほぼ重複した部分ビューを作成する必要があるのでしょうか、それとも同じビューを使い続ける方法はありますか?

4

1 に答える 1

1

あなたはこのようなことを試すことができます:

フォームのベースモデルを作成します。その基本モデルには、2つの子モデルに共通するプロパティと検証属性があります。

public class BaseModel {
    [Required]
    public string Name { get; set; }
}
public class Model1 : BaseModel {
    public bool Form1 { get; set; }
}
public class Model2 : BaseModel {
    public bool Form2 { get; set; }
}

次に、これらのモデルをパラメーターとして受け入れる2つの異なるコントローラーアクションを作成できます。

public ActionResult PostForm1(Model1 model) { }
public ActionResult PostForm2(Model2 model) { }

また、部分ビューでは、フォームに応じて入力を追加する必要があります。

<form action="<%=(isForm1 ? "/PostForm1" : "/PostForm2")>%">
    <input type="hidden" 
           id="<%=(isForm1 ? "Form1" : "Form2")%>" 
           name="<%=(isForm1 ? "Form1" : "Form2")%>" 
           value="true" />
</form>

フォームが投稿されると、そのモデルでのみ検証を行い、他のモデルはそのままにしておく必要があります(両方のフォームモデルをプロパティとして持つビューモデルが必要です)。

これがうまくいくかどうかはわかりませんが、繰り返しになりますが、試してみることができます。

于 2012-04-13T13:43:43.987 に答える