【问题标题】:Pass additional GET params with @Html.TextBox helper使用 @Html.TextBox 助手传递额外的 GET 参数
【发布时间】:2013-11-08 20:54:31
【问题描述】:

我有带有文本输入、表格和寻呼机的页面。文本输入用于设置每页的表格行数。

查看代码:

    @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 }) 但它不起作用(不将订单参数传递给控制器​​)​​。 提交表单时将订单参数传递给控制器​​的正确方法是什么?

【问题讨论】:

    标签: c# html asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    发布的唯一内容是表单中的内容。 因此,您可以放置​​一个@Html.Hidden("Order", ViewBag.CurrentSort)。这将发布订单价值,但不可见。

    【讨论】:

    • 非常感谢。 @Html.Hidden("Order", new { ViewBag.CurrentSort }) 工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2018-01-15
    • 2012-06-01
    • 1970-01-01
    • 2011-02-13
    • 2019-09-05
    相关资源
    最近更新 更多