I am trying to create a standalone editor Registration form. I already have an "admin" page for users to go in and approve once somebody submits a registration record. The datatable/editor works fine on the admin page. However, on the registration page (both pages using the same API) , the UserDepartment select list is not working correctly.
admin page (working fine)
var UsersEditor = new $.fn.dataTable.Editor({
ajax: 'api/Users',
table: '#Users',
fields: [
{ label: "Windows Login:", name: "Users.WindowsLogin" },
{ label: "First Name:", name: "Users.UserFirstName" },
{ label: "Last Name:", name: "Users.UserLastName" },
{ label: "Email Address:", name: "Users.UserEmail" },
{ label: "Department:", name: "Users.UserDepartmentID", type: "select" },
{ label: "Admin?", name: "Users.IsAdmin", type: "select" },
{ label: "Approved?", name: "Users.IsApproved", type: "select" },
{
label: "Record Added",
name: "Users.RecordAdded",
type: "readonly",
def: function () {
var d = new Date();
return d;
}
}
]
});
var table = $('#Users').DataTable({
dom: "Bfrtip",
ajax: 'api/Users',
columns: [
{ data: "Users.WindowsLogin" },
{ data: "Users.UserFirstName" },
{ data: "Users.UserLastName" },
{ data: "Users.UserEmail" },
{ data: "Departments.DepartmentName" },
{
data: "Users.IsAdmin",
render: function (data, type, row) {
return (data == 1) ? "Yes" : "No";
}
},
{
data: "Users.Approved",
render: function (data, type, row) {
return (data == 1) ? "Yes" : "No";
}
},
{ data: "Users.RecordAdded" },
],
select: true,
lengthChange: false,
buttons: [
{ extend: "create", editor: UsersEditor },
{ extend: "edit", editor: UsersEditor },
{ extend: "remove", editor: UsersEditor }
]
});
Registration Page. the dropdown does not populate with the list of departments
$(document).ready(function () {
userNameCookie = readCookie('userNameCookie');
var RegistrationEditor = new $.fn.dataTable.Editor({
ajax: '/api/Users',
fields: [
{ label: "Email Address:", name: "Users.WindowsLogin", def: userNameCookie, type:"readonly"},
{ label: "First Name", name: "Users.UserFirstName" },
{ label: "Last Name", name: "Users.UserLastName" },
{ label: "Email Address:", name: "Users.UserEmail" },
{ label: "Department:", name: "Users.UserDepartmentID", type:"select" },
{ label: "Last Name", name: "Users.IsAdmin", type: "hidden" },
{ label: "Last Name", name: "Users.IsApproved", type: "hidden" },
{ label: "Last Name", name: "Users.RecordAdded", type: "hidden" }
]
});
RegistrationEditor
.create()
.title('Add new record')
.display(true)
.set("Users.IsAdmin", 0)
.set("Users.IsApproved", 0)
.set("Users.RecordAdded", '7/1/2020')
.buttons('Save')
;
});
controller:
public class UsersController : ApiController
{
[Route("api/Users")]
[HttpGet]
[HttpPost]
public IHttpActionResult Users()
{
var request = HttpContext.Current.Request;
var settings = Properties.Settings.Default;
using (var db = new Database(settings.DbType, settings.DbConnection))
{
var response = new Editor(db, "Users", "WindowsLogin")
.Model<UsersModel>("Users")
.Field(new Field("Users.RecordAdded")
.Set(false)
)
.Field(new Field("Users.UserDepartmentID")
.Validator(Validation.NotEmpty())
.Validator(Validation.Numeric())
.Options(new Options()
.Table("Departments")
.Value("DepartmentID")
.Label("DepartmentName")
)
)
.Field(new Field("Departments.DepartmentName"))
.Field(new Field("Users.IsApproved")
.Validator(Validation.NotEmpty())
.Validator(Validation.Numeric())
.Options(() => new List<Dictionary<string, object>>{
new Dictionary<string, object>{ {"value", "0"}, {"label", "No"} },
new Dictionary<string, object>{ {"value", "1"}, {"label", "Yes"} },
})
)
.Field(new Field("Users.IsAdmin")
.Validator(Validation.NotEmpty())
.Validator(Validation.Numeric())
.Options(() => new List<Dictionary<string, object>>{
new Dictionary<string, object>{ {"value", "0"}, {"label", "No"} },
new Dictionary<string, object>{ {"value", "1"}, {"label", "Yes"} },
})
)
.LeftJoin("Departments", "Departments.DepartmentID", "=", "Users.UserDepartmentID")
.Process(request)
.Data();
return Json(response);
}
}
}
API\Users returns Department options correct, again, the Admin page works just fine. And if I change the registration form, taking away type: "select" I am able to type in a DepartmentID and the record will save just fine.