有效地将大量参数传递给ASP.NET MVC Controller操作

时间:2018-10-12 13:37:16

标签: c# asp.net-mvc entity-framework-6

我正在尝试确定一种将大量参数传递给控制器​​动作的更有效方法。我试图查看类似的问题,但在我已经实现的问题之外,它们似乎没有提供任何真正的解释。

作为一个例子,我有一个简单的生成的CRUD程序,它实现了PagedList包。该CRUD程序需要具有多个过滤器(超过10个)。以前,我一直通过URL传递参数。

简单的例子:

// GET: Action/rows
[HttpGet]
public async Task<ActionResult> Index(int? page, string currentrowId, string rowId)
{
    if (rowId != null)
    {
        page = 1;
    }
    else
    {
        rowId = currentRowId;
    }
    var data = from s in db.tblrows
               where s.rowId.ToString().Contains(rowId)
               select s;

    int pageSize = 10;
    int pageNumber = (page ?? 1);

    ViewBag.Page = page;
    ViewBag.currentrowId = rowId;

    return View(await data.ToPagedListAsync(pageNumber, pageSize));
}

然后,在我看来,我通过在每个CRUD视图中的URL传递参数来维护我的参数。例如,在索引视图中,可以使用以下命令在编辑视图中打开一个项目:

@Html.ActionLink("Edit", "Edit", new { id = item.rowId, page = ViewBag.Page, currentrowId = ViewBag.currentrowId }, new { @class = "btn btn-success btn-sm" })

在编辑视图中,我有类似的代码可以维护当前参数,以便当用户返回CRUD界面时,其参数保持不变。

这种方法对于一些参数很好用,但是对于许多参数来说似乎非常繁琐。我考虑过为搜索参数创建一个模型并将其作为ViewModel的一部分传递,但这在考虑所需条件时似乎也不是很有效。

任何有关更好方法的文档或建议,将不胜感激。

编辑: 由于这是MVC,并且我使用的是GET操作方法,因此无法将对象传递给该方法。

2 个答案:

答案 0 :(得分:3)

您可以使用HttpGet将对象传递给MVC操作。...这是我们在解决方案中提供的实时代码中的示例。...我更改了对象并删除了我们的实现,但是绝对有可能。 [FromUri]告诉模型绑定程序在get请求中使用复杂对象。

        [HttpGet]
        [Route("orderitems")]
        public DataResponse<List<ItemDTO>> GetItems([FromUri]SearchObject search)
        {
             // Do stuff
        }

答案 1 :(得分:0)

您可以传递一个对象作为参数。当您有大量参数时使用的一种技术。

在此处查看更多详细信息:

https://www.includehelp.com/dot-net/how-to-pass-object-as-argument-into-method-in-c-sharp.aspx