I've got a webgridextensions class the defines "WebGridColumn" returns for different scenarios..
public static WebGridColumn ApptLinksWSchedule(this WebGrid grid, HtmlHelper html)
{
return grid.Column(
header: "",
style: "actionColumn",
format: item => new HtmlString(
html.ActionLink("Schedule", "Schedule", new { ID = item.CourseExamApptID }, new { onclick = "return confirm('Are you sure you'd like to schedule this Appointment?');" }).ToString()
)
);
}
public static WebGridColumn ApptLinksWCancel(this WebGrid grid, HtmlHelper html)
{
return grid.Column(
header: "",
style: "actionColumn",
format: item => new HtmlString(
html.ActionLink("Edit", "Edit", new { ID = item.CourseExamApptID }).ToString() + " | " +
html.ActionLink("Delete", "Delete", new { ID = item.CourseExamApptID }).ToString() + " | " +
html.ActionLink("Cancel", "Cancel", new { ID = item.CourseExamApptID }, new { onclick = "return confirm('Are you sure you'd like to cancel this Appointment?');" }).ToString()
)
);
}
In my view I need to conditionally apply an htmlActionLinks according to the value of a model property. If my model.AppointmentStatus = "Scheduled", show one set of action links, if not show another set...
<div class="webgrid-wrapper">
<div id="grid">
@grid.GetHtml(
tableStyle: "webgrid",
headerStyle: "webgrid-header",
footerStyle: "webgrid-footer",
alternatingRowStyle: "webgrid-alternating-row",
selectedRowStyle: "webgrid-selected-row",
rowStyle: "webgrid-row-style",
columns: grid.Columns(grid.Column("StudentID", "SMUId"),
grid.Column("StudentName", "Name"),
grid.Column("CourseName", "Course"),
grid.Column("InstructorName", "Professor"),
grid.Column("ExamLength", "ExamLength"),
grid.Column("SchedExamBeginTime", "Time In"),
grid.Column("SchedExamEndTime", "Time Out"),
grid.Column("Notes", "Notes"),
grid.Column("AppointmentStatus", "Status"),
//THIS IS WHat I'd like to display in a column...
//if (model.AppointmentStatus == "Scheduled")
//{
// html.ActionLink("Edit", "Edit", new { ID = item.CourseExamApptID }).ToString() + " | " +
// html.ActionLink("Delete", "Delete", new { ID = item.CourseExamApptID }).ToString() + " | " +
// html.ActionLink("Cancel", "Cancel", new { ID = item.CourseExamApptID }, new { onclick = "return confirm('Are you sure you'd like to cancel this Appointment?');" }).ToString()
//}
//html.ActionLink("Schedule", "Schedule", new { ID = item.CourseExamApptID }, new { onclick = "return confirm('Are you sure you'd like to schedule this Appointment?');" }).ToString()
//THIS IS MY ORIGINAL CODE THAT WORKS with only needing same column and link for every record...
//grid.ApptLinksWCancel(Html)
)
)
</div>
How do I accomplish this?
Thanks
You should be able to use a ternary expression ?: for this, as in:
columns: grid.Columns(
model.AppointmentStatus == "Scheduled" ?
grid.ApptLinksWCancel(Html) : grid.ApptLinksWSchedule(Html)
),
Edit
For something more complicated, you could add an extension method taking an extra parameter:
public static WebGridColumn ApptLinks(this WebGrid grid, HtmlHelper html, string status)
{
if (status == "Schedule")
return grid.ApptLinksWSchedule(html);
else
return grid.ApptLinksWCancel(html);
}
Use it in the same way:
columns: grid.Columns(
grid.ApptLinks(Html, model.AppointmentStatus),
...
),