.NET MVC 4 HttpPost出错了

时间:2012-09-27 08:24:12

标签: .net asp.net-mvc http-post

我对.NET MVC 4有一个有趣的小问题。 我正在努力学习它是如何工作的,在做了一些教程之后我一直遇到同样的问题。

这里是我的默认索引方法,应该在页面加载时调用。

   public ActionResult Index() {
       var result = (from Product in db.Products
                     orderby Product.Id ascending
                     select Product);
       return View(result.ToList());
   }

该方法返回我数据库中的产品项列表..

@using (Html.BeginForm("Index", "Stap1", FormMethod.Post, new { id = "form1" }))
{
    <select id="select" size="4" name="product">
        @foreach (var item in Model)
        {
            <option value="@item.Id" >@Html.DisplayFor(modelItem => item.Naam), @Html.DisplayFor(modelItem => item.Prijs)</option>            
        }
    </select>
    <input type="submit" value="Voeg Toe!" name="Add" />
}

我添加了一个函数来捕获表单的post数据。喜欢这个..

[HttpPost]
public ActionResult Index(int product = 0) {
                var result = (from Product in db.Products
                              orderby Product.Id ascending
                              select Product);
                System.Diagnostics.Debug.WriteLine("wrong function called!");
                return View(result.ToList());
            }

然而,当我尝试加载索引页面时,你可以看到它是非常基本的东西。它调用'重载的httppost索引()而不是正常的。为什么在没有发布时调用HTTPPOST方法?

1 个答案:

答案 0 :(得分:2)

我检查了你的代码,这是正确的行为。 您的应用程序从 HomeController 开始,后者呈现索引视图。

在您看来,我发现了这段代码:

@using (Html.BeginForm("Index", "Stap1", FormMethod.Post, new { id = "form1" }))
{
   <input type="submit" value="Start!" name="start" />
}

所以你实际上发布的是 Stap1Controller 操作索引
如果您想在不发布的情况下调用(HttpGet)您的索引,您应该执行以下操作:

@Html.ActionLink("Start!", "Index", "Stap1")