1

我有一个 webgridextensions 类,它为不同的场景定义了“WebGridColumn”返回..

 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()
            )
        );
    }

在我看来,我需要根据模型属性的值有条件地应用 htmlActionLinks。如果我的 model.AppointmentStatus = "Scheduled",则显示一组操作链接,如果不显示另一组...

<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>

我该如何做到这一点?

谢谢

4

1 回答 1

2

您应该能够使用三元表达式 ?:为此,如:

columns: grid.Columns(
    model.AppointmentStatus == "Scheduled" ? 
        grid.ApptLinksWCancel(Html) : grid.ApptLinksWSchedule(Html)
),

编辑

对于更复杂的事情,您可以添加一个带有额外参数的扩展方法:

public static WebGridColumn ApptLinks(this WebGrid grid, HtmlHelper html, string status)
{
    if (status == "Schedule")
        return grid.ApptLinksWSchedule(html);
    else
        return grid.ApptLinksWCancel(html);
}

以同样的方式使用它:

columns: grid.Columns(
    grid.ApptLinks(Html, model.AppointmentStatus),
    ...
),
于 2013-08-22T23:01:21.897 回答