私はこれについて数日間困惑しています。基本的に、私は他のビュー モデルの 3 つの IEnumerables を含むビュー モデルを 3 つの別々の Kendo コントロール (1 つは ListView として、2 つは GridViews) に表示します。各ビュー モデルには、対応するコントロールで使用される個別のエディター テンプレートがあります。GridViews は 100% 動作しており、Kendo ListView はページ上で適切に動作しています (ListView は更新されたデータで更新されます)。
私の問題は、ビュー モデルの単一のインスタンスではなく、ビュー モデルの IEnumerable が ActionResult (null 値) に渡され、DataSourceRequest が空であることです。
これが(編集された)コードです。
ビュー モデル (問題の ListView のラッパーとビュー モデルのみ):
public class MainPersonViewModel
{
public MainPersonViewModel(){}
public int PersonId { get; set; }
public IEnumerable<DetailsViewModel> PersonDetails { get; set; }
public IEnumerable<AddressViewModel> Addresses { get; set; }
public IEnumerable<PersonGroupingViewModel> MemberOf { get; set; }
}
public class DetailsViewModel
{
public DetailsViewModel(){}
public int PersonId { get; set; }
public string Name { get; set; }
public string WorkingTitle { get; set; }
}
剣道 ListView テンプレート:
@model Staff.ViewModels.MainPersonViewModel
<script type="text/x-kendo-tmpl" id="personDetailsTemplate">
<table>
<tr>
<td>Name: </td><td>${Name}</td>
</tr>
<tr>
<td>Working Title: </td><td>${Title}</td>
</tr>
<tr>
<td colspan="2">
<div class="edit-buttons">
<a class="k=button k-button-icontext k-edit-button" href="\\#"><span class="k-icon k-edit"></span>Edit</a>
</div>
</td>
</tr>
</table>
</script>
そして、Kendo コントロール自体:
@(Html.Kendo().ListView<Staff.ViewModels.DetailsViewModel>(Model.PersonDetails)
.Name("personDetailsList")
.TagName("div")
.ClientTemplateId("personDetailsTemplate")
.Editable()
.DataSource(ds => ds
.Model(m =>
{
m.Id(f => f.PersonId);
m.Field(f => f.Name);
m.Field(f => f.WorkingTitle);
}
)
.Read(read => read.Action("ViewPersonDetails", "Staff", new {id = Model.PersonId}))
.Update(update => update.Action("UpdatePersonDetails", "Staff"))
)
)
コントローラーの Listview によって呼び出される ActionResult は次のとおりです。
public class StaffController : Controller
{
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdatePersonDetails([DataSourceRequest] DataSourceRequest request, IEnumerable<DetailsViewModel> toUpdate)
{
//update code here
return Json(ModelState.ToDataSourceResult());
}
}
最後に、エディター テンプレート (Views\Staff\EditorTemplates にあります):
@model Staff.ViewModels.DetailsViewModel
<div>
<table>
<tr>
<td>@Html.LabelFor(m => m.NameFirst)</td>
<td>@Html.EditorFor(m => m.NameFirst)</td>
</tr>
<tr>
<td>@Html.LabelFor(m => m.NameLast)</td>
<td>@Html.EditorFor(m => m.NameLast)</td>
</tr>
<tr>
<td>@Html.LabelFor(m => m.Title)</td>
<td>@Html.EditorFor(m => m.Title)</td>
</tr>
<tr>
<td colspan="2">
<div class="edit-buttons">
<a class="k-button k-button-icontext k-update-button" href="\\#"><span class="k-icon k-update"></span>Save</a>
<a class="k-button k-button-icontext k-cancel-button" href="\\#"><span class="k-icon k-cancel"></span>Cancel</a>
</div>
</td>
</tr>
</table>
</div>
ListView が更新されているように見えるので、必ずしもそれまたはページ上の DataSource に問題があるとは思わないので、欠落しているエディター テンプレートの詳細 (つまり制限) に傾いています。何かご意見は?
長い投稿で申し訳ありません。どんな助けでも大歓迎です!