Получение ошибки при публикации данных в Umbraco

В настоящее время я использую оба контроллера для получения (RenderMvcController) и публикации (SurfaceController). Но я получаю сообщение об ошибке при вставке записи в базу данных с помощью Umbraco.Core.

Ошибка: "Отсутствует сопоставление типа объекта Umbraco.Web.PublishedCache.XmlPublishedCache.XmlPublishedContent с собственным типом известного управляемого поставщика".

Модель - BaseModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Umbraco.Web;

namespace SampleLogic.Models
{
    public class BaseModel : Umbraco.Web.Models.RenderModel
    {
        public BaseModel()
        : base(UmbracoContext.Current.PublishedContentRequest.PublishedContent)
        {}
    }
}



Модель - Category.cs

[TableName("Categories")]
[PrimaryKey("Id", autoIncrement = true)]
public class Category : BaseModel
{
    public int Id { get; set; }
    public string Name { get; set; }

    public List<Category> lstCategory;

    public Category()
    {
        lstCategory = new List<Category>();
    }
}

Представление: Sample.cshtml

@using SampleLogic
@using SampleLogic.Models
@inherits UmbracoTemplatePage
@{
    Layout = "umbLayout.cshtml";
    var repo = new CategoryRepository();
}

@Html.Action("AddCategory", "SampleSurface")
@foreach (var category in repo.GetAll())
{
    <p>
        @category.Name 
        @Html.ActionLink("Edit", "Sample", "Sample", new { id = @category.Id }, null)
        <a href="[email protected]">Edit</a>
    </p>
}


Репозиторий: CategoryRepository.cs

using SampleLogic.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using umbraco.DataLayer;
using Umbraco.Core;
using Umbraco.Core.Persistence;

namespace SampleLogic
{
    public class CategoryRepository
    {
        private readonly UmbracoDatabase _database;
        public CategoryRepository()
        {
            _database = ApplicationContext.Current.DatabaseContext.Database;
        }

        public List<Category> GetAll()
        {
            return _database.Fetch<Category>("select * from categories");
        }

        public Category GetCategoryById(int id)
        {
            return _database.FirstOrDefault<Category>("select * from categories where Id = " + id);
        }

        public void Insert(Category category)
        {
            _database.Insert(category);
        }

        public void Update(Category category)
        {
            _database.Update(category);
        }

        public void Delete(Category category)
        {
            _database.Delete(category);
        }
    }
}

Контроллер: SampleController.cs

using SampleLogic.Models;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Umbraco.Core.Models;
using Umbraco.Web;
using Umbraco.Web.Models;
using Umbraco.Web.Mvc;

namespace SampleLogic.Controllers
{
    public class SampleController : RenderMvcController
    {
        public ActionResult Sample(int id = 0)
        {
            Category model = new Category();
            var repo = new CategoryRepository();

            if (Request.QueryString["id"] != null)
            {
                model.Name = repo.GetCategoryById(Convert.ToInt32(Request.QueryString["id"])).Name;
            }

            model.lstCategory = repo.GetAll();
            return CurrentTemplate(model);
        }

    }
}



Контроллер: SampleSurfaceController.cs

using SampleLogic.Models;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Umbraco.Core.Models;
using Umbraco.Web;
using Umbraco.Web.Mvc;

namespace SampleLogic.Controllers
{
    public class SampleSurfaceController : SurfaceController
    {
        [HttpPost]
        public ActionResult Sample(Category model)
        {
            var repo = new CategoryRepository();
            if (model.Id > 0)
            {
                repo.Update(model);
            }
            else
            {
                repo.Insert(model);
            }
            model.Name = string.Empty;
            return CurrentUmbracoPage();
        }

        [ChildActionOnly]
        public ActionResult AddCategory(Category model)
        {
            if (Request.QueryString["id"] != null)
            {
                var repo = new CategoryRepository();
                model.Name = repo.GetCategoryById(Convert.ToInt32(Request.QueryString["id"])).Name;
            }
            //TODO: do some searching (perhaps using Examine) 
            //using the information contained in the custom class QueryParameters

            //return the SearchResults to the view
            return PartialView("AddCategory", model);
        }

    }
}


Я получаю сообщение об ошибке в SurfaceController при вставке или обновлении записи. Как решить вышеуказанную проблему. дайте мне знать, в чем проблема с кодом.


person Dimple    schedule 29.08.2014    source источник
comment
На самом деле вы не разместили никакого кода, показывающего, как вы пишете свои записи. Ваш репозиторий действительно единственный код, представляющий интерес, потому что именно он выдает ошибку.   -  person Digbyswift    schedule 29.08.2014
comment
Я думаю, это ошибка из-за RenderModel. Я использовал BaseModel, который наследует RenderModel, и ошибка IPublishedContent, которая передается RenderModel. Я обновил свой вопрос и разместил весь код с помощью BaseModel и CategoryRepository.   -  person Dimple    schedule 29.08.2014
comment
Вам нужно пройти через отладчик и посмотреть, где генерируется исключение. В описании вашего вопроса указано, что я получаю сообщение об ошибке при вставке записи в базу данных, что предполагает, что если вы удалили строки repo.Insert(model); и repo.Update(model);, страница не выдаст исключение. В противном случае нам действительно нужно увидеть код вашего репозитория.   -  person Digbyswift    schedule 29.08.2014


Ответы (1)


Теперь я использовал SurfaceController для публикации и ChildActionOnly для отображения списка рендеринга при загрузке и удалил RenderModel из модели. Теперь он отлично работает для операции CURD.

person Dimple    schedule 10.09.2014