我正在尝试确定一种将大量参数传递给控制器动作的更有效方法。我试图查看类似的问题,但在我已经实现的问题之外,它们似乎没有提供任何真正的解释。
作为一个例子,我有一个简单的生成的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操作方法,因此无法将对象传递给该方法。
答案 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