我在html中有一个select2选项。
AddPermission.cshtml
<div class="control-group">
<label class="control-label">
Parent Permission:</label>
<div class="controls">
<select id="ParentPermission" name="ParentPermission" class="large m-wrap" data-bind='options: permissions, optionsText: "permissionName", optionsValue: "id", optionsCaption: "Seçiniz...", value: parentId, select2: { }'>
</select>
</div>
</div>
<div class="control-group">
<label class="control-label">
Permission Name:</label>
<div class="controls">
<input class="m-wrap large" type="text" id="PermissionName" name="PermissionName"
data-bind="value: permissionName" />
</div>
</div>
<div class="form-actions">
<button class="btn blue" data-bind="click: savePermission">
<i class="icon-ok"></i>Save</button>
</div>
我的淘汰javascript文件中有一些observable,其中一个是parentId。
PermissionModel.js
return function () {
var self = this;
self.id = ko.observable(0);
self.permissionName = ko.observable("");
self.parentId = ko.observable("");
self.permissions = ko.observableArray([]);
self.clearModel = function () {
self.id(0);
self.permissionName("");
self.parentId("");
}
self.savePermission = function () {
console.log(self.parentId() + self.permissionName());
webRequest.postJSON("/Administration/Permission/AddPermission", ko.toJSON(self), self.savePermissionSucceeded);
}
self.getPermissions = function () {
webRequest.postSingle("/Administration/Permission/GetAllPermissions", null, self.getPermissionsSucceeded);
}
}
在加载页面之前,我调用 getPermissions 函数将我的所有权限加载到select2选项菜单。它运作成功。我可以在 getPermission 之后调用 getPermissionsSucceeded 函数,
PermissionModel.js
self.getPermissionsSucceeded = function (result) {
self.permissions.removeAll();
var dataLength = result.length;
for (var i = 0; i < dataLength; i++) {
var data = result[i];
var permission = new PermissionSearchResultModel(data.Id, data.Name, data.ParentId)
self.permissions.push(permission);
}
PermissionSearchResultModel.js
function PermissionSearchResultModel(Id, PermissionName, ParentId) {
var self = this;
self.id = Id;
console.log(self.id);
self.permissionName = PermissionName;
self.parentId = ParentId;
}
然后我写一个权限名称并从列表中选择一个父权限值。它们都必须从淘汰javascript文件中的 savePermissions 函数发布到服务器。
PermissionController.cs
[HttpPost]
public ActionResult AddPermission(PermissionModel model)
{
Permission permission = PermissionService.AddPermission(model.Id, model.PermissionName, model.ParentId);
if (permission.Id != 0)
{
return Json(true);
}
else
{
return new JsonNetResult() { Data = new { Error = true, Messages = new[] { new { Message = "Bu yetki önceden kayıt edilmiş." } } } };
}
}
PermissionService.cs
public static Permission AddPermission(int id, string permissionName, int parentId)
{
GenericRepository<Permission> permissionRepository = new GenericRepository<Permission>();
Permission tempPermission = permissionRepository.First(d => d.Name == permissionName && d.ParentId == parentId);
if (tempPermission == null)
{
tempPermission = new Permission();
tempPermission.Name = permissionName;
tempPermission.ParentId = parentId;
permissionRepository.Add(tempPermission);
return tempPermission;
}
return new Permission();
}
当我检查firebug时,我注意到parentId observable值无法发布到服务器,所以即使它有parentId值,也会在没有parentId的情况下向db添加新记录。其他可观察的内容可以发布。