Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在链接中使用Guid失败_C#_Asp.net Mvc_Guid_Uuid_Uniqueidentifier - Fatal编程技术网

C# 在链接中使用Guid失败

C# 在链接中使用Guid失败,c#,asp.net-mvc,guid,uuid,uniqueidentifier,C#,Asp.net Mvc,Guid,Uuid,Uniqueidentifier,我正在用razor引擎构建一个MVC4项目,尽管我不知道这是否与我的问题有关。 我有一个带有提交(字符串poId)ActionResult的VendorBillController。 我的链接如下所示: 例如:com/VendorBill/Submit?poId=790a2e76-5186-42c1-8087-c13b18d22023 但是,当尝试转到此页面时,出现以下错误: 找不到视图“722884”或其主视图,或者没有视图引擎 支持搜索的位置 为什么要找722884的景色?虽然我非常确定数字

我正在用razor引擎构建一个MVC4项目,尽管我不知道这是否与我的问题有关。 我有一个带有提交(字符串poId)ActionResult的VendorBillController。 我的链接如下所示: 例如:com/VendorBill/Submit?poId=790a2e76-5186-42c1-8087-c13b18d22023

但是,当尝试转到此页面时,出现以下错误:

找不到视图“722884”或其主视图,或者没有视图引擎 支持搜索的位置

为什么要找722884的景色?虽然我非常确定数字、字母和破折号在html链接中是可以的,但我也尝试了对链接进行html编码,但没有任何变化

如果我投入

example.com/VendorBill/Submit?poId=asdf

它将其传递到函数,但随后失败,因为poId被传递到新的Guid()中,而asdf不是Guid

为什么URL中的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());
        }
    }
}

如果将
Submit
的签名更改为
Submit(Guid poId)
,是否有效

在MVC中本机使用GUI没有问题,它会为您转换它们

如果上面的方法不起作用,你能把控制器方法的代码包括进来,让我们看看吗

更新:不,您的问题是:

返回视图(purchaseOrderId.ToString())

如果将字符串传递到视图中,则假定传递的是视图的名称(,如果希望视图模型的类型为
string
,则必须将视图名称作为第一个参数传递,然后是主视图名称,然后是字符串值()。更容易声明具有单个属性的显式视图模型
PurchaseOrderId
,然后将其传递给view方法。按照
view
方法重载的设置方式,您可以使用除字符串以外的任何视图模型类型


如果它是一个GUID,您可以直接将其传入,但您必须将其作为GUID传入,不要调用
ToString()

如果您将
Submit
的签名更改为
Submit(GUID poId)
,是否有效

在MVC中本机使用GUI没有问题,它会为您转换它们

如果上面的方法不起作用,你能把控制器方法的代码包括进来,让我们看看吗

更新:不,您的问题是:

返回视图(purchaseOrderId.ToString());

如果将字符串传递到视图中,则假定传递的是视图的名称(,如果希望视图模型的类型为
string
,则必须将视图名称作为第一个参数传递,然后是主视图名称,然后是字符串值()。更容易声明具有单个属性的显式视图模型
PurchaseOrderId
,然后将其传递给view方法。按照
view
方法重载的设置方式,您可以使用除字符串以外的任何视图模型类型


如果它是一个GUID,您可以将其传入,但必须将其作为GUID传入,不要调用
ToString()

当您只想向强类型视图传递字符串时,问题就出现了。当您传递字符串时,MVC期望的是您要加载的视图的名称。这就是为什么它正在查找并且无法根据您传递的Guid字符串找到视图的原因

MSDN:


Gleen Slaven是正确的,如果将类型从字符串更改为Guid,则不会出现此问题。

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

MSDN:


Gleen Slaven是正确的,如果您将类型从字符串更改为Guid,则不会出现此问题。

那么您是说该操作甚至不会被Guid命中?那么您是说该操作甚至不会被Guid命中?它也不会被Guid命中,这是我的整个控制器,但我认为它不会被命中所以我不确定这是不是问题所在:编辑:我将在问题中添加控制器代码,因为注释中的格式很差。现在我觉得没有捕捉到它有点傻。谢谢!就是这样。它也不能与guid一起工作,这是我的整个控制器,但是我认为它甚至不能到达那里,所以我不确定它是否正确问题:编辑:我将在问题中添加控制器代码,因为注释中的格式很差。现在我觉得没有抓住它有点傻。谢谢!就是这样。