我正在使用剃刀引擎构建一个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());
}
}
}
答案 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,那么您将不会遇到此问题。