Как использовать Telerik MVC Grid для новых данных (как детище отношений один-ко-многим)? - PullRequest
1 голос
/ 14 марта 2012

У меня есть следующие объекты:

create table Person (
    Id int primary key identity,
    Name varchar(80) not null
)

create table Contact (
    Id int primary key identity,
    PersonId int not null foreign key references Person(Id),
    Name varchar(80) not null,
    Relationship varchar(80) not null,
    Phone varchar(80) not null,
    Email varchar(80) not null
)

Я хотел бы создать форму в ASP.NET, чтобы добавить нового человека и его контакты одновременно, используятекстовое поле для имени человека и Telerik MVC Grid для контактов.Например,

<%= Html.TextBoxFor(person => person.Name) %>
<%= Html.Telerik().Grid<EditableContact>() %>

Однако, поскольку сущность человека еще не создана, пока форма не отправлена, как Telerik Grid может отправлять данные на сервер, когда запись контакта добавляется, редактируется или удаляется?

В идеале я хотел бы, чтобы все (имя человека и все его контакты) отправлялись на сервер при отправке формы.


Должен ли я сделать что-то вроде Session["UnsavedPerson"] = new Person(); когда вызывается представление для страницы добавления новых людей и их контактов?

1 Ответ

0 голосов
/ 14 марта 2012

Есть несколько способов сделать это.Один из способов, который я мог бы предложить, - это создать на стороне клиента представление всей модели, которую вы хотите сохранить, что в основном будет представлением вашей модели в формате JSON.

Затем можно использовать привязку сервера для источника данных.(поскольку это звучит так, как будто вы еще ни к чему не привязывались), добавьте обработчик событий клиента для события OnSave.В этом случае вы можете получить введенные значения и сопоставить их с экземпляром JSON модели контакта.

Затем, когда вы нажмете какую-нибудь кнопку сохранения, вы можете отправить эту модель JSON в метод AJAX, чтобыфактически сохраните всю вашу модель.

<%= Html.Telerik()
      .Grid<EditableContact>()
      .Events(events => events.OnSave('contacts_OnSave')
      // rest of your grid configuration
      .Render();
      %>

<script type="text/javascript">

var model = { 
 Name:'',
 // etc.
 Contacts = []
};

function contacts_onSave(e) {
  model.Contacts.push(e.values);
  e.preventDefault(); // prevent the grid from trying to post the new record, since we'll handle it later
}

$(function() {
    $('form').submit(function(e) {
        model.Name = $('#Name').val();
        $.post('url/to/save', model, function() { alert('Saved successfully!'); });
    });
});

</script>

Это, конечно, довольно грубый пример, который можно оптимизировать лучше, но я хочу проиллюстрировать идею получения значений, которые они вставили из сетки, и их использования.потом.Вы, конечно, могли бы с помощью обработчика OnSave создать кучу скрытых входных данных, чтобы сделать эту страницу более POST-совместимой и позволить вам использовать $.fn.serialize, но я оставлю это вам.

...