我有一条简单的路线:
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参数似乎默认为模型中的任何内容。
答案 0 :(得分:2)
这看起来像一个POST操作,在这种情况下,您需要知道发布的表单数据优先于路由参数。因此,如果在SomeModel
的已发布数据中有一个名为someGuid的空Guid,它将用于绑定。
检查this answer以了解MVC在绑定过程中检查值提供程序的顺序。
您还可以在控制器方法中检查RouteData.Values["someGuid"]
和Request.Form["someGuid"]
。如果表单数据中有一个带有该名称的空Guid,那么它将用于您的控制器方法参数。
答案 1 :(得分:0)
你检查过RouteData吗?尝试将Model属性重命名为其他内容。默认情况下,MVC路由引擎会搜索所有内容以查找Route所需的参数。