url:/ jobs / UpdateJobResults / GUIDHERE
当我对下面的函数发帖子时,guid id总是空白的,我可以使用上面的格式在URL中发布GUID(因为表单正文有结果字典)吗?
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateJobResults(Guid Id, Dictionary<string, object> results)
{
}
答案 0 :(得分:2)
您可以尝试修改Html.BeginForm
作为路线值...
Html.BeginForm("myAction", "myController", new { Id = myGuid });
显然,myGuid是你的参数。
如果您的路由设置正确,MVC将知道在URL(和/或查询字符串)中使用此值而不是在Request.Form数据中发布您的表单...
祝你好运!答案 1 :(得分:0)
是的,默认路由的第3个参数是id
。在大多数示例中,它是一个整数,但Guid应该可以工作。
您是否尝试将id
参数作为字符串而不是Guid?通常情况下,MVC足够智能,可以为您提供您正在寻找的对象类型,但我还没有尝试使用Guid。期望id
成为字符串可能会有效。那么至少你知道你的路由工作正常。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateJobResults(string id, Dictionary<string, object> results)
{
}
您使用默认路线还是设置了自己的路线?
修改:所以,您正在使用自己的路线。请编辑您的问题以包含这些问题。另外,你说它适用于GET,但不适用于POST。你的行动看起来是什么样的GET请求?我想我们需要更多的信息来帮助解决这个问题。您确定客户端请求在网址中包含Guid吗?
答案 2 :(得分:0)
我相信MVC使用Convert.ChangeType进行转换。此方法不支持Guids。我的建议是将参数更改为字符串并在方法中将其转换。
答案 3 :(得分:0)
最终被创建的模型绑定器正在查找帖子上的guid而不是查询字符串