2013-08-22 6 views
1

У меня есть класс webgridextensions в определяет «WebGridColumn» возвращает для различных сценариев ..Mvc 4 WebGrid условные htmlActionLinks

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 = «Запланированные», показывают один набор ссылок действий, если не показывать другой набор ...

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

Как это сделать?

Благодаря

+0

К сожалению все, я, м ядрено спит здесь, то, что мне нужно, в edits..Different ссылки в соответствии со значением состояния ... – foxtrotZulu

ответ

2

Вы должны быть в состоянии использовать ternary expression ?: для этого, как и в:

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

Edit

Для чего-то более сложным, вы можете добавить метод расширения принимает дополнительный параметр:

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), 
    ... 
), 
+0

спасибо человеку, это полезно! Я отредактировал свой пост, потому что мне действительно нужно видеть, что каждая строка имеет свой собственный набор actionlinks, все определяются по значению назначения. – foxtrotZulu

Смежные вопросы