2012-09-21 173 views
0

我正在研究一個示例mvc項目,其中我試圖將數據發佈到控制器。我已經張貼示例(見下文),但如果我添加[HttpPost]方法,我得到'404'錯誤。Asp.net MVC - 將數據發佈到控制器

查看:

<% using (Html.BeginForm()) { %> 
    <%= Html.Telerik().NumericTextBox() 
       .Name("NumericTextBox") 
       .Spinners(false) 
       .EmptyMessage("ID") 
    %> 
    <input type="submit" value="Submit" /> 
<% } %> 

控制器:

[HttpPost] 
public ActionResult GetDetails(int id) 
{ 
    return View(); 
} 

**I also tried,** 
[HttpPost] 
public ActionResult GetDetails(FormCollection collection) 
{ 
    return View(); 
} 

路線:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Customer", action = "GetDetails", id = UrlParameter.Optional } // Parameter defaults 
); 
+1

它很典型地找到問題所在。你能否粘貼你的視圖和控制器的整個代碼? –

回答

2

你會希望名稱到控制器上的參數相匹配,所以我相信它should be like this

Html.Telerik().NumericTextBox() 
      .Name("id") 

注:

  1. 雖然你指定UrlParameter.Optional在id路由參數,除非您在控制器操作中使其爲空(即,int? id),否則它並不是真正可選的。
  2. 通常情況下,您應該使用GET而不是POST來處理不會改變服務器上任何內容的HTTP請求,這似乎就是這種情況。
+0

他正在做一個測試。在一個真實的應用程序中,他會改變價值,所以我覺得告訴他使用Get只是令人困惑。另外,如果在URL上傳遞了不同的ID,則爲文本框使用id將與路由值衝突。 –

+0

我在使用參數匹配文本框名稱後仍然收到相同的錯誤。 – CoolArchTek

+0

@CoolArchTek我沒有看到任何其他明顯的問題。確認:您的視圖是'GetDetails',是嗎? – McGarnagle

0

您應該使用第二種方法,但不是FormsCollection,用途:

GetDetails(int NumericTextBox)

該參數必須與輸入框名稱相同。

相關問題