基本ViewModelクラスから継承する子ViewModelクラスがいくつかあります。
子 ViewModel を自分の View に渡し、それ自体を部分ビューに渡します。メイン ビューは子の型を取りますが、部分ビューは親の型を取ります。
プロパティを手動で入力すると、すべてが正しく表示されます。ただし、フォームを送信すると、コントローラー アクションには Child クラスのプロパティしかありません。基本クラスのプロパティはどれも完了していませんか?
例えば
public abstract class BaseDetails
{
public string Name { get; set; }
public BaseDetails()
{ }
public BaseDetails(string name)
{
Name = name;
}
}
public class LocalDetails:BaseDetails
{
public int Visits { get; set; }
public LocalDetails()
{ }
public LocalDetails(int visits, string name)
:base(name)
{
Visits = visits;
}
}
ビューは次のように単純です。
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Visits)
<br />
@Html.Partial("Name", Model)
<input id="Submit1" type="submit" value="submit" />
}
部分ビューには 1 つのテキスト ボックスがあります。
IE: ViewSource は、form タグが両方の tetxbox を囲んでいることを示しています。
ただし、コントローラーメソッドに送信すると:
[HttpPost]
public ActionResult EditLocal (LocalDetails model)
model.Visits は正しく設定されていますが、model.Name は null ですか?
何か案は?パラメーターなしのコンストラクターをクラスに追加したのは、そうしなかった場合に送信時に例外が発生したためです。