2012-10-05 38 views
0

我在創建的應用程序中調用編輯方法時遇到問題。在視圖中單擊一個ActionLink作爲參數應該將訂單號傳遞給Edit方法,並打開一個編輯頁面,其中包含填充在字段中的訂單的信息。然而,點擊鏈接後,我收到錯誤:空參數錯誤

The parameters dictionary contains a null entry for parameter 'orderNum' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ViewResult Edit(Int32)' in 'AddressUpdater.WebUI.Controllers.OrderController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters

但是,該參數存在於URL中。以下是相關的方法:

public ViewResult Edit(int orderNum) 
{ 
    Order order = repository.Orders.First(o => o.OrderNumber == orderNum); 
    return View(order); 
} 

如果如果改變參數int? orderNum頁面將呈現沒有錯誤,但沒有數據是存在的。

+4

請發佈您的actionLink請 –

+0

您如何調用url,更重要的是,您如何繪製路線? –

+0

ActionLink發佈在下面。這裏是路由(這是默認值): 'routes.MapRoute( 「Default」,//路由名稱 「{controller}/{action}/{id}」,//帶參數的URL 新{controller =「Order」, action =「List」,id = UrlParameter.Optional} );' – ian

回答

1

將數據發送到操作方法Edit(即在您的操作鏈接中)很可能有問題。只需打開一些像Firebug或Chrome開發工具等devtool來檢查發送到服務器的內容。

當你的URL看起來像

Edit?OrderNumber=1234 

,那麼你需要有一個匹配的參數上的操作方法一樣

public ViewResult Edit(int orderNumber) {...} 

相反

Edit(int orderNum){...} 

將無法​​正常工作。基本上url參數名稱和操作方法參數名稱必須匹配(不區分大小寫,但名稱必須匹配)

+0

根據Firebug中的「Net」選項卡(我不確定這是我應該使用的) 'GET Edit?OrderNumber = 10000002'。在VS10中使用調試器時,它顯示orderNum爲空。這是視圖中的鏈接,應該將訂單號傳遞給方法 '@ Html.ActionLink(order.OrderNumber.ToString(),「Edit」,new {order.OrderNumber})' – ian

+2

@ian請參閱我的更新文章:您需要重命名您的操作方法'orderNumber'的參數,而不是'orderNum'。 – Juri

+0

哇。我感到愚蠢的哈哈。感謝您的幫助,並教給我一個參數命名的寶貴經驗。 – ian