2009-11-05 48 views
1

网址:/工作/ UpdateJobResults/GUIDHEREASP.NET MVC POST参数中的URL

当我做一个帖子下面这个函数的GUID ID始终是空白的,我可以用上面的格式张贴GUID在URL中(因为表单体有结果字典)?

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UpdateJobResults(Guid Id, Dictionary<string, object> results) 
{ 

} 
+1

你可以包括你的路由(如果不是默认其他)? – Mayo 2009-11-05 17:39:17

+0

适合我在香草设置(默认路由,没有自定义模型绑定),我使用jQuery的帖子例如$ .post(“Home/Test/A070D861-197C-491B-9B8B-0092B43C3172”,{test:“x”}); 你有没有为System.Guid设置一个自定义的模型绑定器? – 2009-11-06 13:42:01

回答

0

结束了创建模型绑定一直在寻找的形式为GUID的岗位,而不是查询字符串

0

是的,默认路由的第三个参数是id。在大多数例子中是一个整数,但Guid应该工作。

你用id参数作为字符串而不是Guid来试试吗?通常情况下,MVC足够聪明,可以为您提供您正在寻找的对象的类型,但我没有使用Guid尝试过。期望id是一个字符串可能工作。那么至少你会知道你的路由工作正常。

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UpdateJobResults(string id, Dictionary<string, object> results) 
{ 

} 

您是使用默认路由还是设置了自己的路由?

编辑:所以,你使用自己的路线。请修改您的问题以包含这些问题。另外,你说它适用于GET,但不适用于POST。 GET请求触发了什么动作?我认为我们需要更多的信息才能帮助解决这个问题。你确定客户端请求包含URL中的Guid吗?

+0

自己的路线和使用模型联编程序来投射GUID,它在GET请求上正常工作,但不适用于POST,它的ASP.NET MVC REST如果有任何区别 – monkeylee 2009-11-06 10:13:51

2

您可以尝试修改您通过传递这是一个路线值Html.BeginForm ...

Html.BeginForm("myAction", "myController", new { Id = myGuid }); 

显然这里myGuid是您的PARAM。

如果您的路由设置正确,MVC就知道网址中包含这个值(和/或查询字符串),而不是在数据的Request.Form来发表您的形式...

祝你好运!

+0

PS,如果这不起作用,请张贴您的路线,重新使用此操作以查看这可能是否有帮助... – Funka 2009-11-05 17:53:06

+0

这只是为表单构建目标网址的一种不同方式。它会生成与OP所说的相同的URL。 – CoderDennis 2009-11-05 20:35:13

+0

我已经使用MVC REST,因此从客户端应用程序没有html表单发布 – monkeylee 2009-11-06 10:30:45

0

我相信MVC使用Convert.ChangeType进行转换。此方法不支持Guid。我的建议是将参数更改为一个字符串并将其转换为方法。