Orchard 1.10.2从1.7升级后,TryUpdateModel无法正常工作

时间:2017-09-21 21:33:10

标签: orchardcms

新手到Orchard CMS

将运行1.7版的现有Orchard站点升级到版本1.10.2后,我的部分(不是全部)内容部件驱动程序不再使用在添加或编辑时输入到表单中的新值更新部件属性。

当我进入添加或编辑项目时,唯一保存的属性是MediaPickerField,它是该部分的一个字段。

我已将非工作代码与解决方案中的工作内容部分驱动程序进行了比较,但我无法看到与导致此问题不同的任何内容。

TryUpdateModel返回true,但表单上没有任何值流过。在添加时,DB中将有一条记录,除了Id之外的所有空字段。驱动程序返回编辑视图,并显示已成功添加部件的消息,但除了图像字段外,所有字段都被清除。

以下是其中一个有问题的部分的代码。

public class FeaturedPromoPartRecord : ContentPartRecord {
    [StringLength(100)]
    public virtual string Name { get; set; }

    [StringLengthMax]
    public virtual string LinkUrl { get; set; }

    public virtual FeaturedPromoGroupPartRecord FeaturedPromoGroupPartRecord { get; set; }

    public virtual int SlideOrder { get; set; }

    public virtual DateTime? StartDate { get; set; }

    public virtual DateTime? EndDate { get; set; }
}

public class FeaturedPromoPart : ContentPart<FeaturedPromoPartRecord> {
    public string Name
    {
        get { return Record.Name; }
        set { Record.Name = value; }
    }

    public string LinkUrl {
        get { return Record.LinkUrl; }
        set { Record.LinkUrl = value; }
    }

    public FeaturedPromoGroupPartRecord FeaturedPromoGroupPartRecord
    {
        get { return Record.FeaturedPromoGroupPartRecord; }
        set { Record.FeaturedPromoGroupPartRecord = value; }
    }

    public int SlideOrder {
        get { return Record.SlideOrder; }
        set { Record.SlideOrder = value; }
    }

    public DateTime? StartDate
    {
        get { return Record.StartDate; }
        set { Record.StartDate = value; }
    }

    public DateTime? EndDate
    {
        get { return Record.EndDate; }
        set { Record.EndDate = value; }
    }
}

public class FeaturedPromoPartDriver : ContentPartDriver<FeaturedPromoPart> {
    private readonly IFeaturedPromoService _featuredPromoService;

    public FeaturedPromoPartDriver(IFeaturedPromoService featuredPromoService) {
        _featuredPromoService = featuredPromoService;
        T = NullLocalizer.Instance;
    }

    public Localizer T { get; set; }

    protected override DriverResult Display(FeaturedPromoPart part, string displayType, dynamic shapeHelper) {
        var group = _featuredPromoService.GetFeaturedPromoGroup(part.FeaturedPromoGroupPartRecord.Id);

        return ContentShape("Parts_FeaturedPromo_SummaryAdmin",
            () => shapeHelper.Parts_FeaturedPromo_SummaryAdmin(ContentPart: part, ContentItem: part.ContentItem, Group: group));
    }

    protected override DriverResult Editor(FeaturedPromoPart part, dynamic shapeHelper) {
        var groups = _featuredPromoService.GetFeaturedPromoGroups();

        var viewModel = new FeaturedPromoEditViewModel
        {
            Groups = groups,
            Name = part.Name,
            FeaturedPromoGroupPartRecordId = (part.FeaturedPromoGroupPartRecord == null) ? 0 : part.FeaturedPromoGroupPartRecord.Id,
            LinkUrl = part.LinkUrl,
            SlideOrder = part.SlideOrder,
            StartDate = part.StartDate,
            EndDate = part.EndDate
        };
        return ContentShape("Parts_FeaturedPromo_Edit",
            () => shapeHelper.EditorTemplate(TemplateName: "Parts.FeaturedPromo.Edit", Model: viewModel));
    }

    protected override DriverResult Editor(FeaturedPromoPart part, IUpdateModel updater, dynamic shapeHelper) {

        var result = updater.TryUpdateModel(part, Prefix, null, null);

        var group = _featuredPromoService.GetFeaturedPromoGroup(part.FeaturedPromoGroupPartRecord.Id);
        if(group != null)
            part.FeaturedPromoGroupPartRecord = group._record.Value;

        if (part.StartDate.HasValue && part.EndDate.HasValue && part.StartDate > part.EndDate)
            updater.AddModelError("", T("The End Date cannot be after the Start Date."));

        return Editor(part, shapeHelper);
    }
}

我看到的一些图像。

修改

enter image description here

添加新

enter image description here

如果有人遇到过这个问题,或者对如何修复有一些了解,我将非常感谢您的帮助!

谢谢

0 个答案:

没有答案