2010-01-10 13 views

Odpowiedz

4

Wydaje się, że stara metoda została usunięta.

Oto jak to zrobić teraz:

VB.NET

Po pierwsze, należy przekazać obiekt HTML do klasy gridmodel przez konstruktora, a następnie można go używać od wewnątrz klasy gridmodel.

Imports MvcContrib.UI.Grid 

Public Class PersonGridModel 
    Inherits GridModel(Of Person) 

    Public Sub New(ByVal html as HtmlHelper) 
     Column.For(Function(u) html.ActionLink("Edit", "Edit", "Person", New With {.id = u.PersonId}, Nothing)).DoNotEncode() 
    End Sub 
End Class 

Następnie w widoku przekazać go przez konstruktora:

<%=Html.Grid(Model).WithModel(New MemberRetentionTrackingSystem.InboundCallGridViewModel(Html))%> 

C#

GridModel:

public class PersonGridModel : GridModel { 
    public PersonGridModel(HtmlHelper html) { 
     Column.For(u => html.ActionLink(“Edit”, “Edit”, “Person”)).DoNotEncode(); 
    } 
} 

Widok:

< %= Html.Grid(ViewData.Model).WithModel(new PersonGridModel(Html)) %> 

REFERENCJE: http://www.jeremyskinner.co.uk/2009/02/22/rewriting-the-mvccontrib-grid-part-2-new-syntax/ (patrz comment from Amitabh)

1

Na marginesie, więcej niedawnej zmiany, .DoNotEncode() jest przestarzała teraz, więc należy używać .Encode (fałszywego)

0

pierwsze, wielkie dzięki do @Andrew for his answer: Amitabh's question i Skinner's answer Naprawdę rozwiałem moje wątpliwości. W każdym razie z ASP.NET MVC 4 miałem twardy czas próbuje dowiedzieć się, dlaczego to w siatce modelu nie działa:

Column.For(hospital => html.ActionLink("View Details", "Show", "Foo")).Encode(false); 

Dlaczego? Bo nie było dodanie niezbędnej przy użyciu dyrektywy:

using System.Web.Mvc.Html; 

ja tylko to za pomocą sugerowane przez Visual Studio IntelliSense:

using System.Web.Mvc; 

Nadzieja pomaga ktoś stoi ten sam problem!