ASP.NET MVC 3 WebGrid, сохранить подкачку и определить маршрут - PullRequest
1 голос
/ 10 февраля 2012

Я начинаю изучать MVC3, но у меня есть некоторые проблемы с WebGrid,

Имя контроллера - TestController, поэтому я перехожу к: http://localhost:53503/Test/

И веб-сетка, показанная ниже:

enter image description here

два столбца: идентификатор и имя. 3-й и 4-й столбцы: Actionlink и item.GetSelectLink.

Первая проблема: Предположим, что я просматриваю страницу 3 веб-сетки и нажимаю ActionLink, после того, как go-думал действие TestContoller, веб-сетка вернется на страницу 1 после PostBack.

Однако, если я нажму [View (GetSelectLink)] на правом конце:
(например, http://localhost:53503/Test/?gridItems_page=3&gridItems_selectedRow=3
Это работает.

Итак, я должен использовать ActionLink или GetSelectLink для общей операции добавления / обновления / удаления?

MVC3 не имеет состояния просмотра / управления, так как я могу сохранить текущий выбор страницы после PostBack?

Вторая проблема: (Href) для ActionLink:
http://localhost:53503/Test/GetSelection/7?Name=PSP
Я бы добрался до
http://localhost:53503/Test/GetSelection/7/PSP

Я добавляю новый маршрут в global.asax, но это не удача.

Большое спасибо за помощь.

Это мой код:

Views / Test / Index.cshtml

@model List<MvcContract.Controllers.Products>

@{
    System.Web.Helpers.WebGrid grid = new System.Web.Helpers.WebGrid(
        source: Model,
        canPage: true,
        rowsPerPage: 3,
        fieldNamePrefix: "gridItems_",
        pageFieldName: "page",
        selectionFieldName: "selectedRow"
       );
}

@{      
    if (Model != null)
    {
    @grid.GetHtml(
                columns: grid.Columns(
                grid.Column("ID"),
                grid.Column("Name"),
                        grid.Column(format: (item) => Html.ActionLink("View(ActionLink)", "GetSelection", new { ID = item.ID, Name = item.Name })),
                        grid.Column(format: (item) => item.GetSelectLink("View(GetSelectLink)"))
               )
               );
     }
}

Контроллеры / TestController.cs

namespace MvcContract.Controllers
{
    public class Products
    {
        public string ID { get; set; }
        public string Name { get; set; }

        public List<Products> GetItems()
        {
            List<Products> items = new List<Products>(); 
            items.Add(new Products() { ID = "1", Name = "PS3" });
            items.Add(new Products() { ID = "2", Name = "XBox360" });
            items.Add(new Products() { ID = "3", Name = "Wii" });
            items.Add(new Products() { ID = "4", Name = "Saturn" });
            items.Add(new Products() { ID = "5", Name = "Dreamcast" });
            items.Add(new Products() { ID = "6", Name = "NDS" });
            items.Add(new Products() { ID = "7", Name = "PSP" });
            items.Add(new Products() { ID = "8", Name = "NeoGeo" });
            items.Add(new Products() { ID = "9", Name = "3DO" });
            items.Add(new Products() { ID = "10", Name = "Playdia" });
            return items;
        }
    }

    public class TestController : Controller
    {
        //Bind data to WebGrid
        public ActionResult Index()
        {
            Products products = new Products();
            return View(products.GetItems());
        }

        //Some Logic
        public ActionResult GetSelection(string ID, string Name)
        {
            string SelectedID = ID;

            return RedirectToAction("Index");
        }

    }
}

RegisterRoutes () в Global.asax.cs

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

    routes.MapRoute(
        "Test_GetSelection", // Route name
        "{controller}/{action}/{id}/{name}", // URL with parameters
        new { controller = "Test", action = "GetSelection", id = UrlParameter.Optional, name = UrlParameter.Optional } // Parameter defaults
    );
}

1 Ответ

0 голосов
/ 29 марта 2013

Проверьте это обсуждение . Я думаю, что одно из нескольких решений может решить вашу проблему.

Поскольку с тех пор, как вы опубликовали это, прошел целый год, пожалуйста, оставьте ответ, если вы нашли другой способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...