Frage

Ich verwende das MVC Contrib Grid zum Rendern, Sortieren und Filtern meines Datenrasters, habe aber jetzt Probleme, da es für MVC3 und Razor aktualisiert wurde.Die benutzerdefinierte Methode in meiner Spaltensammlung funktioniert nicht für ASPX-Seiten und die Aktionsmethode für Spalten ist jetzt veraltet.

Ich verwende die Aktionsmethode „Grids“, um meine Spalten in MVC 2 wie folgt darzustellen:

 ...
 <% Html.Grid(Model).Columns(column => {
            column.For(x => x.Id);
            column.For(x => x.Name);
            column.For(x => x.Email);
            column.For(x => x.DateOfBirth);
            column.For("View User").Named("Tools").Action(x => { %>
                 <td>
                   <%= Html.ActionLink("View", "View", new { id = p.Id })%>
                   <%= Html.ActionLink("Edit ", "Edit", new { id = p.Id })%>
                   //Snip as there are too many tools :-)
                   //.....
                   <%= Html.ActionLink("Delete", "Delete", new { id = p.Id })%>
                </td>
            <% });
 ...

Mit der neuesten Version gibt es jetzt eine benutzerdefinierte Methode, die die veraltete Aktionsmethode ersetzt.Ich habe mir angesehen, wie es gemacht werden kann hier drin, was bei mir jetzt im Grunde funktioniert, aber ich verliere alle meine Helfer in der ASPX-Ansicht (URL usw.) und muss meine Inhalte jetzt mit einer anderen Methode in meinem Modell wie unten rendern:

 ...
 <% Html.Grid(Model).Columns(column => {
            column.For(x => x.Id);
            column.For(x => x.Name);
            column.For(x => x.Email);
            column.For(x => x.DateOfBirth);
            //the new custom column 
            column.Custom(Model.ToolsRenderer);
            <% });
 ...

Die Rastermodellmethode unten namens ToolsRenderer wird zum Rendern meiner HTML-Zeichenfolge verwendet.

 public UserManagementViewModel : BaseModel {
   //..snip
   //
     public object ToolsRenderer(Client client)
     {
        List<string> links = new List<string>();

        var editLink = new TagBuilder("a");
        // here is my biggest problem, before  Html.ActionLink used to make
        // sure that I don't have any missing links or help me if i need to 
        // refactor an action / controller name :-(
        editLink.Attributes["href"] = GetEditUserLink(client,   HttpContext.Current.Request.Url.AbsoluteUri);
        editLink.SetInnerText("edit");
        links.Add(editLink.ToString());
        ...
        ...lots of links to be generated here
        ...
        return MvcHtmlString.Create(string.join(" |", links))
        }
   //..snip
}

Das funktioniert vorerst, aber gibt es eine Möglichkeit, meine ASPX-Seite wie die Razor-Ansichten unten zum Laufen zu bringen?

@Html.Grid(Model).Columns(column =>
{
  column.For(x => x.Id).
  column.For(x => x.Name);
  column.Custom(@<td><a href='@Html.Actionlink("edit","user",new {id})' alt="@item.email"/><a></td>)

})

Ich möchte etwas sagen wie:

...     
column.Custom(%><td><a href='<%=Html.Actionlink("edit","user",new {id})%>' alt="<%=item.email%>"/><a></td><%)
...
War es hilfreich?

Lösung

gelang es schließlich, mit einiger Hilfe und Graben eine Arbeit zu finden, und verwenden Sie anstelle der benutzerdefinierten Spalte Spalte, und drücken Sie das HTML.Partial ein.So etwas wie der Code unten.

generasacodicetagpre.

Andere Tipps

für RAZOR-Hülle @Helper kann für benutzerdefinierte Felder verwendet werden.

Beispiel:

generasacodicetagpre.

Wenn Sie ergänzend zu den anderen Antworten nach dieser benutzerdefinierten Spalte sortieren möchten, vergessen Sie nicht, eine hinzuzufügen SortColumnName.Wenn Sie dies nicht tun, verwendet das Raster das Named Argument als Spaltenname, aber Named wird auch verwendet, um der Spalte einen Titel zu geben.Ich habe gerade Kopfschmerzen bekommen, weil der Name meiner Kolumne nicht mit dem Titel übereinstimmte:

column.For(c => "custom text").Named("Column Name").SortColumnName("ColumnName");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top