在链接中使用Guid失败

时间:2012-11-20 00:18:25

标签: c# asp.net-mvc guid uuid uniqueidentifier

我正在使用剃刀引擎构建一个MVC4项目,虽然我不知道这是否与我的问题有关。 我有一个VendorBillController与Submit(String poId)ActionResult。 我的链接看起来像这样: example.com/VendorBill/Submit?poId=790a2e76-5186-42c1-8087-c13b18d22023

但是,在尝试转到此页面时,我收到此错误:

  

未找到视图'722884'或其主人或没有查看引擎   支持搜索的位置。

为什么要查看视图722884?虽然我非常确定html链接中的数字,字母和破折号是正常的,但我也尝试对链接进行html编码,但没有任何变化。

如果我放入

  

example.com/VendorBill/Submit?poId=asdf

它使它成为函数,但随后失败,因为poId被传递给新的Guid()而asdf不是guid。

为什么网址中的guid会失败?当guid是需要传递的ID时,是否存在“正常”的工作?

编辑:

这是我整个控制器的代码:

它也不能用guid工作,这是我的整个控制器,但我不认为它甚至到达那里所以我不确定这是问题:

    public class VendorBillsController : Controller
    {
        public ActionResult Submit(Guid poId)
        {

            var purchaseOrderId = new Models.Entities().TempLinks.AsQueryable().Single(x => x.Guid == poId).PurchaseOrderId;


            return View(purchaseOrderId.ToString());
        }
    }
}

2 个答案:

答案 0 :(得分:3)

如果您将Submit的签名更改为Submit(Guid poId)

,是否有效?

在MVC中本机使用GUID没有问题,它会为你转换它们。

如果上述方法不起作用,请您包含控制器方法的代码,以便我们查看它?

更新:不,您的问题是:

return View(purchaseOrderId.ToString());

如果您将字符串传递给View,它会假定您传递的内容是视图的名称(see this on MSDN),如果您希望视图模型的类型为string那么您'必须将视图名称作为第一个参数传递,然后是主视图名称,然后是字符串值(this overload)。更容易声明具有单个属性{{1}的显式视图模型然后将其传递给view方法。设置PurchaseOrderId方法重载的方式可以使用除字符串之外的任何视图模型类型

如果它是GUID,您可以将其传入,但是您必须将其作为GUID传递,不要调用View

答案 1 :(得分:1)

当您只想将字符串传递给强类型视图时,问题就出现了。传入字符串时,MVC期望的是要加载的视图的名称。这就是为什么它正在查找并找不到基于您传入的Guid字符串的视图。

MSDN:Controller.View(string viewName)

Gleen Slaven是正确的,如果您将类型从字符串更改为Guid,那么您将不会遇到此问题。