Проблема с Telerik Grid и MVC3 - PullRequest
       7

Проблема с Telerik Grid и MVC3

0 голосов
/ 13 сентября 2011

У меня небольшая проблема с MVC3 и Telerik Grid . У меня есть следующая модель:

public class Country
{
    [Key]
    public int CountryID { get; set; }
    public string CountryName { get; set; }
    public string CountryShortName { get; set; } 

    //
    // Example 
    public ICollection<City> Citys { get; set; }
}

и моя City модель:

public class City
{
    [Key]
    public int CityID { get; set; }
    public string CityName { get; set; }

    //
    // .... 
    public virtual Country Country { get; set; }
}

И я использую MVCScaffolding (..., используя репозитории), и у меня есть:

public class CountryRepository : ICountryRepository
{
    ProjektContext context = new ProjektContext();

    public IQueryable<Country> All
    {
        get { return context.Country; }
    }

    public IQueryable<Country> AllIncluding(params Expression<Func<Country, object>>[] includeProperties)
    {
        IQueryable<Country> query = context.Country;
        foreach (var includeProperty in includeProperties) {
            query = query.Include(includeProperty);
        }
        return query;
    }
}
//... and more more more :)
public interface ICountryRepository
{
    IQueryable<Country> All { get; }
    IQueryable<Country> AllIncluding(params Expression<Func<Country, object>>[] includeProperties);
    // .. more more ....
}

и мой контроллер и вид:

public class CountryController : Controller
{
    private readonly ICountryRepository countryRepository;

    // If you are using Dependency Injection, you can delete the following constructor
    public CountryController() : this(new CountryRepository()) {}

    public CountryController(ICountryRepository countryRepository)
    {
        this.countryRepository = countryRepository;
    }

    //
    // GET: /Country/

    public ViewResult Index()
    {
        return View(countryRepository.AllIncluding(country => country.Citys));
    }

    [GridAction]
    public ActionResult _AjaxIndex()
    {
        return View(new GridModel<Country>
        {
            Data = countryRepository.AllIncluding(country => country.Citys)
        });
    }
}

Мой Index.cshtml:

@model IEnumerable<Test.Models.Country>
@{
    ViewBag.Title = "Index";
}
@(Html.TelCountryerik().Grid(Model)
    .DataBinding(dataBinding => dataBinding.Ajax().Select("_AjaxIndex", "Country"))
    .Name("Country")
    .Columns(columns =>
        {
            columns.Bound(c => c.CountryName);
            columns.Bound(c => c.CountryShortName);
        })
    .Sortable()
    .Pageable()
    .Groupable()
    .Filterable()
)
  1. Я не могу получить доступ к значениям City из Telerik Grid (мастер / детальная сетка). Я пытаюсь следовать примеру и не получаю правильный результат.
  2. Проблема возникает, когда я пытаюсь отсортировать сетку фильтра (без детализации, конечно). У меня есть ошибки безопасности, но когда я изменяю _AjaxIndex в приведенном ниже коде все нормально (конечно, без доступа к городам).

    [GridAction]
    public ActionResult _AjaxIndex()
    {
        return View(new GridModel<Country>
        {
            Data = countryRepository.All
        });
    }
    

Может кто-нибудь помочь мне с моей проблемой?

1 Ответ

1 голос
/ 15 сентября 2011

Я решаю проблему самостоятельно. Проблема заключалась в ошибках в компонентах Telerink, которые (если вы загружаете с помощью NUGet) не работают правильно с jQuery 1.6 +.

Вот ссылка на «решатель проблем: P» jQuery 1.6+ Telerink + MVC FIX

Я надеюсь, что Telerink скоро обновит неправильную (старую) версию компонентов на NUGet.

Вот пример - проверено

    @(Html.Telerik().ScriptRegistrar()
.jQuery(false)
.jQueryValidation(false)
.DefaultGroup(group => group
    .Add("~/Scripts/jquery-1.6.4.js")
    .Add("~/Scripts/jquery.validate.js")
    .Add("~/Scripts/modernizr-2.0.6-development-only.js")
    .Add("~/Scripts/2011.2.712/telerik.common.min.js")
    .Add("~/Scripts/2011.2.712/telerik.textbox.min.js")
    .Add("~/Scripts/2011.2.712/telerik.grid.min.js")
    .Add("~/Scripts/2011.2.712/telerik.draganddrop.min.js")
    .Add("~/Scripts/2011.2.712/telerik.grid.grouping.min.js")
    .Add("~/Scripts/2011.2.712/telerik.grid.filtering.min.js")
    .Add("~/Scripts/2011.2.712/telerik.grid.editing.min.js")
    .Add("~/Scripts/2011.2.712/telerik.window.min.js")
.Combined(true)
.Compress(true))
.OnDocumentReady(
@<text>
    prettyPrint();
</text>)
)
...