У меня есть классы c #, которые нужно передать в модель представления с выбыванием для целей поиска. Показывать статус пользователя 1000 или роль 14038 бесполезно.
Мне нужно разрешить эти значения в их текстовом представлении.
У меня есть некоторые "справочные данные", заполненные в базе данных. Кроме того, есть некоторые преобразования T4, которые переводят справочные данные в код C #, например:
public static class UserStatus
{
#region Members
public const string ClassName = "UserStatus";
public const int Pending = 1000;
public const int Active = 1001;
public const int Inactive = 1002;
public const int Deleted = 1003;
#endregion
}
Этот класс затем используется во всем коде для присвоения значений классу User, вместо того, чтобы говорить user.UserStatus = 1000, это user.UserStatus = UserStatus.Pending.
Теперь к вопросу ...
ТЕКУЩИЙ ВЫПУСК
У меня есть страница со списком пользователей в системе, и один из столбцов в списке - это статус пользователя. Хорошо, что статус, переданный в объекте, равен 1000, а не «Ожидание». То, что я хотел бы сделать, это иметь возможность восстановить 1000 в «Ожидание» в нокауте. Проблема в том, что нокаут выполняется на стороне клиента, он не знает моих классов C #. В идеале я хотел бы иметь возможность предварительно заполнить список в моем контроллере возможными значениями UserStatus, передать его в мою модель представления выбивки, сделать так, чтобы он просматривал возможные состояния и разрешал его на основе этого конкретного статуса пользователя.
HTML-код
<tbody style="display: none;" class="table-body" data-bind="visible: true, foreach: { data: viewData.ClientGroups, as: 'ClientGroup' }">
<tr>
<td><a href="#" data-bind="click: ClientGroup.viewDetails"><span data-bind="html: ClientGroup.Name()"></span></a></td>
<td>TODO: Bind Client</td>
<td><span data-bind="html: ClientGroup.StatusText()"></span></td>
<td><span data-bind="html: ClientGroup.CreatedOnText()"></span></td>
</tr>
</tbody>
Создание и привязка модели вида нокаута.
var viewData = {};
require(['main'], function () {
require(['message', 'viewModel/clientGroupViewModel', 'viewModel/clientGroupDetailsViewModel'],
function (message, clientGroupViewModel, clientGroupDetailsViewModel) {
$(document).ready(function () {
// enable ko punches
ko.punches.enableAll();
var json = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model, Newtonsoft.Json.Formatting.None, new IHtmlStringConverter()));
// I'd like to be able to create something here and pass it to my model.
var lookupValues = { blah }
viewData = new clientGroupViewModel(json, lookupValues);
var zdm = new clientGroupDetailsViewModel(json, lookupValues );
ko.applyBindings(viewData, document.getElementById('clientGroupAdmin'));
ko.applyBindings(zdm, document.getElementById('detailsModal'));
});
});
});
В нокаут-модели
_self.StatusText = ko.computed(function () {
console.log('user status');
if (ko.utils.arrayFirst(UserStatus, function (value) {
console.log(value);
return value.Id == _self.UserStatus();
}));
return 'false';
});