次のような単純なモデルがあります。
public class AppointmentModel
{
private static List<SampleModel> _list;
public string ClientName {
get;
set;
}
[DataType( DataType.Date )]
public DateTime Date {
get;
set;
}
public bool TermsAccepted {
get;
set;
}
public List<SampleModel> SampleModelList {
get;
set;
}
public static List<SampleModel> GetSampleList() {
if ( _list == null ) {
_list = new List<SampleModel>( 0 );
_list.Add( new SampleModel {
Id = 1,
Name = "Test",
IsChecked = false
} );
_list.Add( new SampleModel {
Id = 2,
Name = "Another test",
IsChecked = true
} );
_list.Add( new SampleModel {
Id = 3,
Name = "All test",
IsChecked = false
} );
}
return _list;
}
}
SampleModel
次のようになります (チェックボックスの入力をシミュレートするために作成されます):
public class SampleModel
{
public int Id {
get;
set;
}
public string Name {
get;
set;
}
public bool IsChecked {
get;
set;
}
}
私の見解では、私は実装しました:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SimpleAppWithModelBinding.Models.AppointmentModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Page
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Page</h2>
<% using ( Html.BeginForm(FormMethod.Post) ) { %>
<%:Html.ValidationSummary()%>
<p>Name: <%: Html.EditorFor( model => model.ClientName )%></p>
<p>Date: <%: Html.EditorFor( model => model.Date )%></p>
<p><%: Html.EditorFor( model => model.TermsAccepted )%> Accept terms</p>
<%-- here I put the checkbox list using editor template --%>
<%: Html.Action( "RenderPartialSample" ) %>
<input type="submit" value="Test" />
<%} %>
</asp:Content>
そしてコントローラー側HomeController
:
public ActionResult Page() {
return View();
}
// explicit validate model
[HttpPost]
public ActionResult Page( AppointmentModel model ) {
// do some verification here
if ( model.SampleModelList == null || ( model.SampleModelList != null && model.SampleModelList.Count == 0 ) ) {
ModelState.AddModelError( "SampleModelList", "Please check something !" );
}
if ( ModelState.IsValid ) {
//do something here
return View( "Completed", model );
} else {
return View( "Page", model );
}
}
public PartialViewResult RenderPartialSample() {
List<SampleModel> model = new List<SampleModel> {
new SampleModel{
Id = 1,
IsChecked = true,
Name = "Test"
},
new SampleModel{
Id = 2,
IsChecked = false,
Name = "Test1"
},
new SampleModel{
Id = 3,
IsChecked = false,
Name = "Test2"
}
};
AppointmentModel a = new AppointmentModel();
a.SampleModelList = model;
return PartialView( "SamplePartialView", a.SampleModelList );
}
問題:
送信を押すpublic ActionResult Page( AppointmentModel model )
と、モデルが提供され、彼はSampleModelList
nullを持っています。常にnullです。モデルからそのリストにチェック済みの入力を入れたいのですが、部分的なビューのために機能していない可能性があります。
私の場合、2 つのモデルを検証する方法は? または、私の場合の最善のアプローチは何ですか、おそらく私のアプローチは良くありません。
助けてください :)
アップデート:
SamplePartialView
内容:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<SimpleAppWithModelBinding.Models.SampleModel>>" %>
<%: Html.EditorForModel() %>
そしてテンプレート:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SimpleAppWithModelBinding.Models.SampleModel>" %>
<%: Html.HiddenFor( x => x.Id ) %>
<%: Html.CheckBoxFor( x => x.IsChecked, new {
value = Model.Id
} )%>
<%: Html.LabelFor( x => x.IsChecked, Model.Name ) %>
<br />