【问题标题】:Help with mapping ActionLinks to Methods in Controllers (ASP.NET MVC2)帮助将 ActionLinks 映射到控制器中的方法 (ASP.NET MVC2)
【发布时间】:2010-09-24 18:05:51
【问题描述】:

我正在进行我的第一个 MVC 项目,但还没有完全掌握它。我遇到了这个问题:

我的视图中有这个 (Home/Index.aspx)

<% using (Html.BeginForm()) { %>
<fieldset>
<p>
    <%: Html.TextBox("A")%> 
    <%: Html.TextBox("B") %>
    <%: Html.ActionLink("Submit", "Create", "Home")%> 
</p>
</fieldset>
<% } %>

我的控制器中有这个(Controllers/HomeController.cs)

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formValues)
{
    return View("Index");
}

我没有更改 global.asx 中的默认路由

当我点击提交时,我收到“找不到资源错误”。但是,如果我将 ActionLink 更改为

<input type="submit" value="Save" />

以及控制器中的方法:

[AcceptVerbs(HttpVerbs.Post)]
 public ActionResult Index(FormCollection formValues)
 {
     return View("Index");
 }

它工作正常。

我有点困惑,因为如果我在 ActionLink 中指定确切的操作方法名称和控制器( ),为什么我将此方法命名为 Create 或 Index 很重要?

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing


    【解决方案1】:

    您有[AcceptVerbs(HttpVerbs.Post)],它将其限制为 HTTP POST 请求。由于操作链接是 GET,因此它没有使用您的方法。大概您有 两个 Index 方法,其中一个没有该属性并接受 GET 请求。

    【讨论】:

    • 谢谢...实际上我意识到我的 ActionLink 在这两种情况下都不起作用。它仅在我有 时才有效。
    • @Prabhu,嗯,是的,这是有道理的。这就是[AcceptVerbs(HttpVerbs.Post)]应该要做的事情。删除它,它会工作。
    • 好的,所以我有一个问题...在同一个视图中,我需要有两个发布按钮。例如,像 StackOverflow 这样的东西——在同一个视图上,用户可以使用 CreateAnswer 或 CreateComment。由于无法在
    • @Prabhu,处理这个问题的首选方法是使用两个完全独立的
      元素(BeginForm/EndForm),每个按钮一个。 (如果 SO 是一个适当的类比,那将完美地工作,因为评论文本框和答案文本框是互斥的。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签