gpt4 book ai didi

c# - ASP.NET MVC中,为什么绑定(bind)对象时参数绑定(bind)为数组而不是特定类型

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:47 25 4
gpt4 key购买 nike

我有一堆具有类似删除操作的 Controller ,所以我将其放入基类中。这是它之前的样子:

    public async Task<ActionResult> Delete(int id)
{
await apiClient.Delete(id);
return new EmptyResult();
}

在 View 中有一个原始链接指向:

/Items/Delete?Id=" + item.Id

这很好用,但是有些模型使用字符串代替 int 作为键。由于 API 客户端由可以通过 object 删除的 Entity Framework 存储库支持,我只是尝试了这个:

    public async Task<ActionResult> Delete(object id)
{
await apiClient.Delete(id);
return new EmptyResult();
}

现在我得到一个绑定(bind)到 id 的单元素数组。单个元素是表示 item.Id 的字符串。为什么?为什么它是一个数组而不是简单的元素?

最佳答案

我的猜测是,这实际上是传递给它的数据的默认格式,因为所有表单值都作为字符串传递给服务器,并且当存在名称冲突时,这些值可以作为该名称下的数组访问。所以实际上,string[] 是所有提交值的默认类型,其他任何类型都涉及某种自动转换。

例如,如果您有一个包含三个文本输入的表单,它们都具有相同的名称“text”,浏览器将发送这三个文本,而 MVC 将从一个名为“text”的字符串数组开始。由于 Controller 参数类型是“object”,它真的无法对如何处理它做出任何聪明的猜测,所以它只是给你原始数组。

另一方面,如果已知字段类型是字符串,那么它会将它们组合成一个逗号分隔的列表;并且您可以通过将类型设置为“string[]”来避免这种不需​​要的连接步骤。如果参数类型为“int”,它会尝试将字符串值转换为整数。如果参数类型为“bool”,它将尝试将字符串解释为 bool 值。因此,字符串数组实际上是正常值,其他所有内容都在接受特殊转换。

关于c# - ASP.NET MVC中,为什么绑定(bind)对象时参数绑定(bind)为数组而不是特定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32630296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com