1

我在使用 .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" />
}

我添加了一个函数来捕获表单的发布数据。像这样..

[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 Index()”而不是正常的。为什么在没有发布任何内容时调用 HTTPPOST 方法?

4

1 回答 1

2

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

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

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

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

@Html.ActionLink("Start!", "Index", "Stap1")
于 2012-09-27T09:49:42.743 回答