asp mvc看似用模型参数覆盖url参数

时间:2014-01-03 09:41:39

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

我有一条简单的路线:

some-domain.com/something/<some-guid>/somethingelse

然后我的控制器看起来像:

public class SomeController : Controller
{
    public ActionResult DoSomething(Guid someGuid, SomeModel someModel)
    {...}
}

路由配置如下:

/something/{someGuid}/somethingelse

问题是,如果我在适当的位置发送带有guid的URL,它总是似乎是一个空的guid,即使在查询字符串上它完全没问题。我唯一能想到的是我的SomeModel在这个实例中有一个名为SomeGuid的属性,它是空的。

mvc是不是以某种方式从模型中获取someGuid而不是url或者还有其他什么要检查?因为我可以调试它从路径中击中正确的控制器,并且url看起来很好,只是url参数似乎默认为模型中的任何内容。

2 个答案:

答案 0 :(得分:2)

这看起来像一个POST操作,在这种情况下,您需要知道发布的表单数据优先于路由参数。因此,如果在SomeModel的已发布数据中有一个名为someGuid的空Guid,它将用于绑定。

检查this answer以了解MVC在绑定过程中检查值提供程序的顺序。

您还可以在控制器方法中检查RouteData.Values["someGuid"]Request.Form["someGuid"]。如果表单数据中有一个带有该名称的空Guid,那么它将用于您的控制器方法参数。

答案 1 :(得分:0)

你检查过RouteData吗?尝试将Model属性重命名为其他内容。默认情况下,MVC路由引擎会搜索所有内容以查找Route所需的参数。