1

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

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

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

为什么要寻找视图 722884?尽管我很确定 html 链接中的数字、字母和破折号都可以,但我也尝试了对链接进行 html 编码,但没有任何变化。

如果我输入

example.com/VendorBill/Submit?poId=asdf

它进入函数,但随后失败,因为 poId 被传递到 new 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());
        }
    }
}
4

2 回答 2

3

如果您将签名更改为Submitto ,它会起作用Submit(Guid poId)吗?

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

如果上述方法不起作用,您能否将控制器方法的代码包含在内,以便我们查看一下?

更新:不,你的问题是这样的:

return View(purchaseOrderId.ToString());

如果您将一个字符串传递给 View,它假定您传递的是视图的名称(请参阅 MSDN 上的此内容),如果您希望您的视图模型是类型,string那么您将不得不传递视图name in 作为第一个参数,然后是主视图名称,然后是字符串值(此重载)。声明具有单个属性的显式视图模型PurchaseOrderId然后将其传递给视图方法要容易得多。设置方法重载的方式View可以使用字符串之外的任何视图模型类型。

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

于 2012-11-20T00:24:29.680 回答
1

当您只想将字符串传递给强类型视图时,就会出现问题。当您传入一个字符串时,MVC 期望的是您要加载的视图的名称。这就是为什么它根据您传入的 Guid 字符串寻找但找不到视图的原因。

MSDN:Controller.View(字符串视图名称)

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

于 2012-11-20T00:44:17.323 回答