KendoUI listview在MVC </model>中从编辑器模板传递IEnumerable <model>而不是模型

时间:2013-05-16 19:33:46

标签: asp.net-mvc listview kendo-ui ienumerable mvc-editor-templates

我已经困惑了几天了。基本上,我有一个视图模型,其中包含三个IEnumebles的其他视图模型,将在三个独立的Kendo控件中显示 - 一个作为ListView,两个作为GridViews。每个视图模型都有一个单独的编辑器模板,由相应的控件使用。 GridViews正在100%工作,并且Kendo ListView在页面上正常工作(ListView使用更新的数据刷新)。

我的问题是视图模型的IEnumerable正在传递给ActionResult(带有空值),而不仅仅是视图模型的单个实例,而DataSourceRequest是空的。 < / p>

这是(编辑过的)代码。

视图模型(只是有问题的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; }
}

Kendo 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>

剑道控制自己:

@(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的问题,所以我倾向于使用我缺少的编辑器模板的一些细节(即限制)。有什么想法吗?

很抱歉这篇长篇文章,非常感谢任何帮助!

0 个答案:

没有答案