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
If your enum is defined like this:
public enum EmployeeType {
RecruitmentOffice, //value = 0
ResearchInstitute //value = 1
}
In your View (*.cshtml) you can pass enum value like this:
var enumVal = 0; @* RecruitmentOffice *@
$.ajax({
url: '@(Url.Action("Details", "Employee"))',
type: 'POST',
dataType: 'json',
data: {
id: employeeId ,
type: enumVal
}
success: function (result) {
@* Handle success *@
}
}
Where the enumVal is the Enum Value you need . And don't forget to decorate your Details action method with [HttPost] .
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, eg
$.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 action type
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.