2013-10-30 10 views
0

我有页面文本输入,表和寻呼机。文本输入用于设置每页的表格行数。传递额外的GET参数@ Html.TextBox帮手

查看代码:

@using (Html.BeginForm("Index", "Read", FormMethod.Get)) 
    { 
     <p> 
      Rows per page: @Html.TextBox("cnt", ViewBag.cnt as int?) 
      <input type="submit" value="Refresh" /> 
     </p> 
    } 
    <table> 
      <tr> 
       <th> 
        @Html.ActionLink("Code", "Index", new { Order = ViewBag.CodeSortParm, cnt = ViewBag.cnt })  
       </th> 
       <th> 
        @Html.ActionLink("Description", "Index", new { Order = ViewBag.TextSortParm, cnt = ViewBag.cnt }) 
       </th> 
      </tr> 

    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @item.Code    
      </td> 
      <td> 
       @item.Text 
      </td> 
     </tr> 
    } 
</table> 
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount 

@Html.PagedListPager(Model, page => Url.Action("Index", new { page, cnt = ViewBag.cnt, Order = ViewBag.CurrentSort })) 

控制器代码:

public ActionResult Index(string Order, int? page, int? cnt) 
     { 
      ViewBag.CurrentSort = Order; 
      ViewBag.CodeSortParm = String.IsNullOrEmpty(Order) ? "Code_desc" : ""; 
      ViewBag.TextSortParm = Order == "Text" ? "Text_desc" : "Text"; 

      ViewBag.cnt = cnt; 

      Tbl T = new Tbl(); 
      IQueryable<ErrCode> ErrCodes = T.GetErrCodes(); 

      switch (Order) 
      { 
       case "Code_desc": 
        ErrCodes = ErrCodes.OrderByDescending(x => x.Code); 
        break; 
       case "Text": 
        ErrCodes = ErrCodes.OrderBy(x => x.Text); 
        break; 
       case "Text_desc": 
        ErrCodes = ErrCodes.OrderByDescending(x => x.Text); 
        break; 
       default: 
        ErrCodes = ErrCodes.OrderBy(x => x.Code); 
        break; 
      } 

      int pageSize = cnt ?? 3; 
      int pageNumber = (page ?? 1); 
      var onePageOfProducts = ErrCodes.ToPagedList(pageNumber, pageSize); 
      return View(onePageOfProducts); 
     } 

在按下按钮 “刷新” 把它传递给控制器​​仅CNT值。但我想要传递Order值。 我尝试这个变种: @Html.TextBox("cnt", ViewBag.cnt as int?, new { Order = ViewBag.CurrentSort }) 和这个: Html.BeginForm("Index", "Read", FormMethod.Get, new { Order = ViewBag.CurrentSort }) 但它不起作用(不传递命令参数到控制器)。 什么是正确的方式来提交表单时传递给参数控制器?

回答

2

唯一被张贴的是它在窗体内部的内容。 所以,你可以放置一个@Html.Hidden("Order", ViewBag.CurrentSort)。这将过帐订单​​值,但不会显示。

+1

非常感谢。 '@ H​​tml.Hidden(“Order”,新的{ViewBag.CurrentSort})'正常工作。 – Andrey