the controller code looks like
public class EmployeeController : Controller
{
public enum EmployeeType
{
RecruitmentOffice,
ResearchInstitute
}
public ActionResult Details(int id, EmployeeType type)
{
switch (type)
{
case EmployeeType.RecruitmentOffice:
// load repository
// load domain object
// load view specific to recruitment office
break;
case EmployeeType.ResearchInstitute:
// load repository
// load domain object
// load view specific to recruitment office
break;
}
}
}
now i want that how to generate form action method
which will point to Details
action method and pass the enum value like EmployeeType.RecruitmentOffice or EmployeeType.ResearchInstitute
and again when i will call that action method by jquery
then how could i pass parameter for id & EmployeeType
.
please discuss with sample code. thanks
What about sending as string
and convert to enum
public ActionResult Details(int id, string type)
{
EmployeeType empType= (EmployeeType) Enum.Parse(
typeof(EmployeeType), type, true );
}
or do write the custom model binder.
Note: Request params are string
This is also pretty cool:
[Flags]
public enum PersonRole { User, Student, Instructor };
then from your razor view:
<button onclick="onclickDeleteRole('@(PersonRoleEnum.User|PersonRoleEnum.Student)')">
and in your javascript:
function onclickDeleteRole(role) {
var personId = $('#SelectedPersonId').val();
$.ajax({
url: window.getUrl('Person/DeletePersonRole'),
type: 'POST',
dataType: 'json',
data: {
personId: personId,
roles: role
},
success: function (json) {
alert('success!')
},
error: function (jqXHR, status, error) {
alert('error')
}
});
}
and your controller action:
public JsonResult DeletePersonRole(int personId, PersonRoleEnum roles)
{
// do business logic here...
// roles will now have value PersonRoleEnum.User|PersonRoleEnum.Student
// and you can use roles.HasFlag(PersonRoleEnum.User) to check if that flag is set
return Json(new {Result = "OK"});
}
EDIT: for readability, you can always use strings in javascript, and MVC will parse those for you, e.g.
$.ajax({
url: window.getUrl('Person/DeletePersonRole'),
type: 'POST',
dataType: 'json',
data: {
personId: 1,
roles: 'Student'
},
success: function (json) {
alert('success!')
},
error: function (jqXHR, status, error) {
alert('error')
}
});
If you pass an enum value in your form, it will show up as an int in you controller. I think you have 2 ways to handle this :
type
parameter an int, then cast it to your enum in your actiontype
and tries to cast it before getting into your action.Some links, with sample code, may help you : http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder http://www.codeproject.com/Articles/551576/ASP-NET-MVC-Model-Binding-and-Data-Annotation
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With