ОК, ваш код выглядит как демо здесь .Вам просто нужно закончить:
Сначала создайте модал на странице:
@(Html.Kendo().Window().Name("Details")
.Title("Customer Details")
.Visible(false)
.Modal(true)
.Draggable(true)
.Width(300)
)
В примере используется шаблон кендо для отображения деталей, поэтому вы можете добавить список кендотам (вам нужно будет использовать .ToHtmlString()
, так как это вложенный элемент управления ).Я предпочитаю другой подход, в котором я могу использовать частичное представление с моделью представления:
Создание модели представления с отображаемыми элементами списка и другими свойствами:
public class DetailsViewModel
{
public int PersonId { get; set; }
public string Name { get; set; }
... etc
public List<string> MyListItems;
}
Создание частичного представлениядля деталей со списком (или сеткой) на нем:
@model DetailsViewModel
<div>
... // Show fields, etc.
@(Html.Kendo().ListBox()
... other list options
.BindTo(Model.MyListItems)
.Deferred() // Need for nested control
</div>
Создайте действие контроллера для возврата частичного:
public PartialViewResult GetDetailsView(int personId)
{
// fetch data
// Fill the viewmodel
var vm = new DetailsViewModel
{
PersonId = data.PersonId,
Name = data.Name,
MyListItems = context.Items.Where(i => i.PersonId == personId).ToList()
}
return PartialView("_Details", vm);
}
Код JavaScript для нажатия кнопки откроетокно и сказать ему, чтобы загрузить частичное представление из действия контроллера:
<script type="text/javascript">
function showDetails(personId) {
var wnd = $("#Details").data("kendoWindow");
wnd.refresh({
url: '@Url.Action("GetDetailsView","Person", new { personId = "__personid__" })'
.replace("__personid__", personId )
});
wnd.open();
}
</script>
Наконец, измените пользовательскую команду для передачи в Id:
.Click("showDetails(PersonId)")
EDIT - или используйте шаблон дляВаша кнопка:
columns.Template(t => { }).Width(150)
.ClientTemplate(@"<a class='btn btn-info btn-xs' onclick="showDetails(PersonId)">Details</a>");