(カスタムドロップダウンのような)カスタムフォームコントロールを作成するための正しいMVCの方法はどれですか? 私はそのようなコントロールを作成し、それを少数のページで再利用する方法が必要です。私は、デフォルトのバインダー を使用して、アクションメソッドが呼び出されたときに選択した値をバインドします。 誰かがこれがどのようにして簡単な例を挙げることができますか?ASP.NET MVC2カスタムコントロール
私の意見ではあまりうまく設計されていない現在のソリューションです。
DropDownViewModel.cs
class DropDownViewModel {
...
public string BindName {get; set;} // the name that default binder uses to bind to action param
public int SelectedValue {get;set;} // this value should be set when user use the drop down
...
}
DropDown.ascx
私はこの1つのようないくつかの他のビューモデルにこのDropDownViewModelを含めるしようとすると、問題が来る:
GeneralUserInfoViewModel.cs
class GeneralUserInfoViewModel {
...
public DropDownViewModel Gender {get;set;}
...
}
012適切BINDNAMEを動作させる
AccountController.cs
...
public ActionResult EditGeneralUserInfo(GeneralUserInfoViewModel info) {
}
...
これは "Gender.SelectedValue" に設定する必要があります。これは、RegisterUserViewModelでBindNameを設定することで解決できます。
RegisterUserViewModel.cs今BINDNAMEが、これはデフォルトのバインダーで正しく動作するために、「GeneralInfo.Gender.SelectedValue」に設定する必要があります
class RegisterUserViewModel {
...
public GeneralUserInfoViewModel GeneralInfo {get;set;}
...
}
:GeneralUserInfoViewModelのような別のビューモデルの一部である場合しかし、何が起こります:
...
public ActionResult RegisterUser(RegisterUserViewModel info) { ... }
...
など このレイヤーはどのように処理できますか? DropDownVoewModelでBindName attrに何を設定すべきかを決定するにはどうすればよいですか?あるいは、それを実装するもう一つの良い方法がありますか?
+1は私にそれを打ち、より多くのクリーン/簡潔に起動する! – RPM1984
@ RPM1984:あなたの公正さと正直をありがとう! –
私は実際にあなたが記述する両方のメソッドの混合を使用していますが、私は別の問題を抱えています - EDITを読んでください – devfreak