2012-11-20 27 views
1

我正在用剃刀引擎構建一個MVC4項目,但我不知道它是否與我的問題有關。 我有一個VendorBillController提交(字符串poId)ActionResult。 我的鏈接看起來是這樣的: example.com/VendorBill/Submit?poId=790a2e76-5186-42c1-8087-c13b18d22023在鏈接中使用Guid失敗

但是,試圖訪問這個頁面的時候,我得到這個錯誤:

The view '722884' or its master was not found or no view engine supports the searched locations.

爲什麼它尋找視圖722884?雖然我非常確定html鏈接中的數字,字母和破折號都可以,但我仍然嘗試使用html編碼鏈接,但沒有任何更改。

如果我把在

example.com/VendorBill/Submit?poId=asdf

這使得它的功能,但後來因爲POID被傳遞到新的GUID()失敗,ASDF是不是一個GUID。

爲什麼URL中的guid失敗?是否有一個'正常'的工作,當一個GUID是需要通過的ID?

編輯:

這裏是我的整個控制器代碼:

它不與GUID工作,要麼,這是我整個控制器,但我不認爲它甚至到達那裏,所以我「M不知道它的問題:

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

所以你說這個動作甚至沒有被GUID命中? –

回答

3

請問,如果你改變的Submit的簽名Submit(Guid poId)工作?

在MVC中使用GUID本身沒有問題,它會爲你轉換它們。

如果上述不起作用,您能否請包含控制器方法的代碼,以便我們可以查看它?

更新:不,你的問題是這樣的:

return View(purchaseOrderId.ToString());

如果你傳遞一個字符串到視圖,它假設你正在傳遞的是視圖(see this on MSDN)的名稱,如果你希望你的視圖模型的類型爲string,那麼你將不得不通過視圖名稱作爲第一個參數,然後是主視圖名稱,然後是字符串值(this overload)。更容易聲明顯式視圖模型其中有一個屬性PurchaseOrderId然後將其傳遞給view方法。View方法重載是設置你可以使用任何視圖模型類型,除了字符串。

你可以只通過它,如果它是一個GUID,但你必須在把它作爲一個GUID,不叫ToString()

+0

它不與GUID工作,要麼,這是我整個控制器,但我不認爲它甚至到達那裏,所以我不知道它的問題: 編輯:我會控制代碼添加到這個問題,因爲格式在評論中顯得很差。 – Kyle

+0

查看更新以上 –

+0

現在我覺得有點傻,因爲沒有抓住它。謝謝!就是這樣。 – Kyle

1

問題是當你想通過只將一個字符串中強類型視圖。當您傳遞字符串時,MVC期望的是您想要加載的視圖的名稱。這就是它尋找的原因,並且無法根據您傳入的Guid字符串找到視圖。

MSDN:Controller.View(string viewName)

Gleen斯拉文是正確的,如果你從一個字符串類型更改爲GUID,那麼你將不會有這個問題。