【问题标题】:ASP.NET MVC - Model binding multiple parameters with same name in different entities - GET and POST different?ASP.NET MVC - 模型在不同实体中绑定多个具有相同名称的参数 - GET 和 POST 不同?
【发布时间】:2011-09-13 06:07:50
【问题描述】:

我利用模型绑定在动作方法签名中的 3 个不同位置填充特定参数名称(2 个过滤器实体参数和一个普通控制器动作参数)。

即

public ViewResult foo(Entity1 something, Entity2 somethingelse, somefield)

Entity1 和 Entity2 在其中都有一些字段。

对于我使用 GET 测试的一个请求,一切正常。对于另一个请求,我使用了 POST,并且只填充了 action 方法中完全相同名称的参数。实体中的其余参数已正确映射。我用另一个参数测试了一下,结果是一样的。

ASP.NET MVC 是否只为 POST 请求填充一个特定名称的参数,但为 GET 请求填充一个特定参数名称的参数的多个实例?这是“未定义”的行为和模型绑定器的滥用吗?

【问题讨论】:

  • 你如何设置你的路由,以便你的 GET 请求可以正常工作?

标签: c# asp.net asp.net-mvc


【解决方案1】:

我很确定还有什么地方不对劲。我只是用以下方法对其进行了测试

public class Foo
{  
    public string Name { get; set; }
}

public class Bar
{  
    public string Name { get; set; }
}

作为控制器方法:

[HttpPost]
public ActionResult Index(Foo bar, Bar foo, string Name)
{

    return View();
}

对于视图来说只是一个简单的

@using (Html.BeginForm("Index", "Home")) { 

    @Html.TextBox("Name")

    <input type="submit" value="save" />
}    

它按预期工作,bar.Name、foo.Name 和 Name 本身都填充了提交时提供的值。

所以 POST 和 GET 没有区别。

更详细地说,这就是 MVC 所做的,其中 MethodInfo 是一个 System.Reflection.MethodInfo 类型的对象,它表示即将执行的操作方法:

ParameterInfo[] parameterInfos = MethodInfo.GetParameters();
var rawParameterValues = 
        from parameterInfo in parameterInfos
        select ExtractParameterFromDictionary(parameterInfo, parameters, MethodInfo);

因此,对于为给定方法定义的每个参数,它将尝试从对象parameters 检索参数值,其中包括查询字符串提供的内容。

【讨论】:

    猜你喜欢
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2016-01-22
    相关资源
    最近更新 更多