2012-02-10 19 views
1

を定義し、私はMVC3を学び始めるが、私は、WebGridの上でいくつかの問題を抱えている、ASP.NET MVC 3のWebGridは、ページングを保存し、ルート

[コントローラ名がTestControllerあるので、私はに移動します。 http://localhost:53503/Test/

とのWebGridは以下の通り:

enter image description here

2カラム:IDと名前。 第3 &第4列:Actionlinkおよびitem.GetSelectLink。

最初の問題は次のとおりです。私はwebgridのページ3を見て、ActionLinkを押して、TestContollerのアクションを考えた後、WebBackがPostBackの後のページ1に戻ります。しかし

、私は右端の[表示(GetSelectLink)]を押すと:
(例えばhttp://localhost:53503/Test/?gridItems_page=3&gridItems_selectedRow=3
それが動作

だから、私は削除/一般的な追加/更新のためにActionLinkのかGetSelectLinkを使用する必要があります。操作

MVC3は/ビューステート状態を制御するので、どのように私はポストバック後に、現在のページの選択を保存することができていない

第二の問題は、次のとおりです。?? ActionLinkのの(HREF)は次のとおりです。
http://localhost:53503/Test/GetSelection/7?Name=PSP
私はそれは私がGlobal.asaxのための新しいルートを追加し、それは運ではありません
http://localhost:53503/Test/GetSelection/7/PSP

になるだろう。

ありがとうございました。

ビュー/テスト/ 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():

それは私のコードです。 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 
    ); 
} 

答えて

0

チェックアウトthis discussion。私はいくつかの解決策の1つがあなたの問題を解決するかもしれないと思います。

これを投稿してから1年が経過していますので、別の方法で見つけた場合は、回答を投稿してください。

関連する問題