問題は本当に単純ですが、私はそれを解決できないようです。DevExpress コンボ ボックスで Razor エンジンを使用しています。
私はこのコードを持っています:
モデル:
public class TestModel
{
public string Name { get; set; }
public List<Role> Roles { get; set; }
}
public class Role
{
public int RoleId { get; set; }
public string RoleName { get; set; }
}
コントローラ
public ActionResult OpenTest()
{
TestModel tm = new TestModel( );
tm.Roles = new List<Role>( );
tm.Roles.Add( new Role( ) { RoleId = 1, RoleName = "Role 1" } );
tm.Roles.Add( new Role( ) { RoleId = 2, RoleName = "Role 2" } );
tm.Roles.Add( new Role( ) { RoleId = 3, RoleName = "Role 3" } );
return View( tm );
}
ここでビューを正常に開くことができ、データが正常に表示されます。
見る
@model TestDx.Models.TestModel
@{
ViewBag.Title = "OpenTest";
}
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using ( Html.BeginForm( ) )
{
@Html.DevExpress( ).ComboBox(
settings =>
{
settings.Name = "TestDx.Models.TestModel.Roles";
settings.Width = 120;
settings.SelectedIndex = 0;
settings.Properties.DropDownWidth = 300;
settings.Properties.DropDownStyle = DevExpress.Web.ASPxEditors.DropDownStyle.DropDownList;
settings.Properties.EnableCallbackMode = false;
settings.Properties.CallbackPageSize = 30;
settings.Properties.IncrementalFilteringMode = DevExpress.Web.ASPxEditors.IncrementalFilteringMode.StartsWith;
settings.Properties.TextFormatString = "{0}";
settings.Properties.ValueField = "RoleID";
settings.Properties.ValueType = typeof( int );
settings.Properties.Columns.Add( "RoleID", "RoleID", 10 );
settings.Properties.Columns.Add( "RoleName", "RoleName", 100 );
} ).BindList( Model.Roles ).GetHtml( )
<br />
@Html.DevExpress().Button(
settings =>
{
settings.Name = "btnSave";
settings.ClientEnabled = true;
settings.ControlStyle.CssClass = "button";
settings.ClientVisible = true;
settings.Text = "save";
settings.UseSubmitBehavior = true;
settings.ControlStyle.Font.Bold = true;
}).GetHtml()
}
これはすべて非常に単純で、私はそれを使って何もしていません。しかし、[保存] ボタンをクリックすると、コントローラーの次のメソッドに戻ります。
[HttpPost]
public ActionResult OpenTest( [ModelBinder( typeof( DevExpressEditorsBinder ) )]TestModel model )
{
if ( ModelState.IsValid )
{
//
}
return View( model );
}
...ここのモデルは空で、ロール プロパティは 0 です。なぜなのかわかりません。コンボ ボックス名がバインド先のプロパティと同じである場合、推奨される DevExpress バインダーを使用していると確信しています。
ありがとう。