Telerik-MVC Grid Отображение значения свойства в сравнении со значением редактирования - PullRequest
0 голосов
/ 26 августа 2011

Надеюсь, это будет простой ответ.

Используя MVC3, я передаю простой список объектов POCO в качестве модели на мой взгляд:

public partial class PeopleAddress
{
    public int Id { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
    public int PersonId { get; set; }

    public virtual Person Person { get; set; }
}

Я использую PeopleId каксвойство FK для сущности Person и навигационное свойство Person для навигации к объекту.Вот мой контроллер для просмотра:

public ViewResult Index()
    {
        var peopleaddresses = db.PeopleAddresses.Include("Person");
        return View(peopleaddresses.ToList());
    }

Довольно тривиально.Я добавляю столбцы в сетку и в обычные режимы редактирования и т. Д. В представлении, но для свойства PersonId.

ВОПРОС О КОЛОННАХ: Как получить режим выбора (нормальный) для отображения модели.Person.Name, но сохранить режим редактирования при редактировании модели .PersonId?Для привязки модели мне нужен HTTP-пост для отправки PersonId.

Help!

1 Ответ

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

Simple

Если все, что вам нужно, это Person.Id, когда вы нажимаете edit (вы редактируете вне сетки или что-то в этом роде), тогда это НАСТОЛЬКО просто.Ваш столбец будет:

columns.Bound(e => e.Person).Title("Person").ClientTemplate("<#= Person ? Person.Name : '' #>");

И вы можете получить идентификатор для человека:

onEdit(e) {
    var personId = e.dataItem['Person'].Id;
}

Полный

Однако, если вы пытаетесь изменить всетка с использованием комбинированного списка, ваш столбец должен выглядеть следующим образом:

columns.Bound(e => e.Person).Title("Person").ClientTemplate("<#= Person ? Person.Name : '' #>").EditorTemplateName("PersonSelector");

ваш шаблон редактора:

@(Html.Telerik().ComboBox()
.Name("YourNameGoesHere")
.DataBinding(binding => binding.Ajax().Select("SelectPeopleForComboBox","Shared")))

Ваш клиентский скрипт:

onEdit(e){
    $comboBox = $(e.cell).find('#Person');
    if($comboBox.length > 0) {
        var comboBox = $ddl.data('tComboBox');
        comboBox.fill(function(){
            if (e.dataItem['Person'] != null){
                    ddl.value(e.dataItem['Person'].Id)
            }
        });
     }
}
...