-1

快速的新手问题。我不知道为什么我的 Html.ActionLink 在“查看源代码”中转换为这个

<a href="/Customer/CustomerSave?custid=1104">Save</a>

我的 Html 助手看起来像这样:

<%: Html.ActionLink("Save", "CustomerSave","Customer",new {custid = 101 })%> 

尝试访问我的控制器时出现“找不到资源”错误:

[HttpPost]
public ActionResult CustomerSave(int custid)
{
........
}

很明显,锚没有很好地形成。我已经阅读了其他帖子并尝试了其他选项,但我不完全理解发生了什么。我要做的就是在我的客户控制器中点击操作(“CustomerSave”)。

我究竟做错了什么?

4

3 回答 3

3

将您的更改CustomerSave为 HTTPGet 或删除 HTTPPost。

[HttpPost] //<-- Here
public ActionResult CustomerSave(int custid)
{
........
}

您收到错误是因为 ActionLink 正在作为 HttpGet 运行,而您的操作上标记了 HTTPPost 属性。如果您想让它成为一个帖子,您可以尝试在单击链接时向您的操作发出 Ajax POST 请求。Default Action URl 链接点击会执行一个GET请求。

试试这个方法

       @Ajax.ActionLink("Save", 
             "CustomerSave",
            "Customer",
             new {custid = 101 },
            new AjaxOptions {
                HttpMethod = "POST",
                OnSuccess = "saveCustomer"
        }) ;

和JS

 function saveCustomer(response, status, data) {

       // Here you get any response
    }

或者您可以在 customerSave 链接的点击处理程序中使用纯Jquery Ajax POST

于 2013-06-03T21:17:43.763 回答
0

Html.ActionLink 创建一个锚标记,这些只是 GET。

尝试使用 Ajax.ActionLink:

<%: Ajax.ActionLink("Save", "CustomerSave","Customer",new {custid = 101 }, new AjaxOptions{ HttpMethod="Post"})%> 
于 2013-06-04T10:06:23.080 回答
0

在您的 Global.asax.cs 文件中,RegisterRoutes 方法应该是这样的:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Customer", action = "CustomerSave", custid = UrlParameter.Optional }
        );
       }

并且您的控制器方法应该具有相同的参数 custid。

于 2013-06-04T04:47:23.200 回答