2012-09-21 32 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)

该参数必须与输入框名称相同。

相关问题