Я пытаюсь создать постраничную таблицу результатов, которая содержится в частичном представлении.Он динамически обновляется с помощью AJAX-вызовов.
Я воспроизводлю это на нескольких страницах, где он работает отлично, однако на конкретной странице мне требуется, чтобы значения строк таблицы были связаны и возвращались с помощью ViewModel.
Для достижения этой цели я попытался использовать шаблон EditorTemplate для настраиваемого объекта, который я использую для коллекции PagedList.Проблема заключается в том, что шаблон редактора, который появляется в PartialView, не правильно именует коллекцию PagedList в основной модели представления.
Вероятно, проще, если я объясню с помощью кода.
Основной вид выглядит следующим образом:
@model RequestCreateViewModel
<Code>
<div id="gridContainer">
@Html.Partial("_PagedCreateRequest")
@Html.HiddenFor(x => x.PageSize)
@Html.HiddenFor(x => x.PageNumber)
</div>
<div id="loadingContainer">
</div>
<More code>
Таким образом, Частичным является:
@model IPagedList<CreateRequestModel>
<Code>
<table class="tablesorter" style="width:750px;">
<thead>
<tr>
</tr>
</thead>
<tbody>
@Html.EditorFor(x => Model)
</tbody>
</table>
</div>
<div style="float:left">
@Ajax.ImageActionLink(
"../../Content/images/first.gif",
"alt text",
"PageResults",
new
{
Page = 1,
area = "Admin",
SortBy = Model.SortBy,
SortDescending = Model.SortDescending,
PageSize = Model.PageSize
},
new
{
style = "margin-top: 2px;"
},
new
{
@readonly = "readonly"
},
new AjaxOptions
{
UpdateTargetId = "gridContainer"
}
)
</div>
+ other pager Ajax pager icons and stuff
Шаблон EditorTemplate:
@model CreateRequestModel
<tr>
<td>
@Html.CheckBoxFor(x => x.IsSelected)
</td>
<td>
@Html.DisplayFor(x => x.CompanyName)
@Html.HiddenFor(x => x.CompanyName)
</td>
<td>
@Html.DisplayFor(x => x.CompanyISIN)
@Html.HiddenFor(x => x.CompanyISIN)
</td>
<td>
@Html.DisplayFor(x => x.ShareDesc)
@Html.HiddenFor(x => x.ShareDesc)
</td>
<td>
@Html.DisplayFor(x => x.ShareClass)
@Html.HiddenFor(x => x.ShareClass)
</td>
</tr>
Модель представления:
public class RequestCreateViewModel : ViewModelBase
{
public IPagedList<CreateRequestModel> PagedList { get; set; }
CreateRequestModel:
public class CreateRequestModel
{
public int RequestId { get; set; }
public bool IsSelected { get; set; }
public string CompanyName { get; set; }
public string CompanyISIN { get; set; }
public string ShareDesc { get; set; }
public string ShareClass { get; set; }
}
Но при повторной публикации в контроллер (код):
[Authorize(Roles = "Foo")]
[HttpPost]
public ActionResult RequestCreate(RequestCreateViewModel model)
Свойство IPagedList не привязано к ViewModel (очевидно), поскольку стандарты именованияEditorTemplate имеют значение
, например: [0]. Независимо от
вместо:
PagedList [0]. Независимо от
Я не могу создать экземпляр связанной копииИнтерфейс для IPagedList во ViewModel либо.Итак, как мне получить информацию из основного представления для модели?
Я думаю, что решение может быть связано с пользовательским механизмом связывания моделей, но мой опыт в этой области минимален.Конечной целью этого является определение значения флажков в таблице.Пользователь выберет или нет, и мне нужно знать, что они выбрали!
Большое спасибо за любую помощь.