首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP MVC3 -发布后找不到HttpPost操作

ASP MVC3 -发布后找不到HttpPost操作
EN

Stack Overflow用户
提问于 2012-01-27 14:26:11
回答 1查看 4.9K关注 0票数 1

我有一个MVC3应用程序,它有几个HttpPost ActionResult方法。在调试会话期间,这些方法工作得很好。但是,当我在浏览器中发布和查看web应用程序时,只有HttpPost方法失败。Firebug显示"404 not found“。同一控制器中的其他非HttpPost方法可以正常工作。

更新:

1)应用发布的url为localhost/psp。2)所有GET操作都返回http://localhost/psp/http://localhost/psp/’/‘action’的URL。

3) POST操作返回的是http://localhost/http://localhost/’/‘action’的URL。

因此,这似乎是一个路由问题。我的Global.asax.cs文件中唯一的路径是:

代码语言:javascript
运行
复制
    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
        );

请注意,主控制器不包含任何HttpPost操作。所有失败的POST方法都在单独的控制器中。我尝试将此路由调整为:psp/{controller}/{action}/{id},但随后收到一个403.14错误(仅供参考,我使用的是IIS7.5)。

我不明白为什么这些HttpPost方法在调试期间有效,而在发布的应用程序中却不起作用。下面是在发布后出现404错误的方法之一:

代码语言:javascript
运行
复制
    [HttpPost]
    public ActionResult GetAreaSelTexResult(JSON_MapSelPars pars)
    {

        AreaSelTextResult myResult = new AreaSelTextResult();

        using (var ctx = new prismEntities())
        {
            var q = from p in ctx.pPSPMapSummary_Sel(pars.areaType, pars.areaName, null, null,pars.goalCDL) select p;

            // There should only be one record returned, so loop will iterate only once.
            foreach (var k in q)
            {
                //Move procedure results to object
                myResult.TopProjectName1 = k.TopProjectName1;
                myResult.TopProjectName2 = k.TopProjectName2;
                myResult.TopProjectName3 = k.TopProjectName3;

                myResult.TopProjectSnapshotLink1 = k.TopProjectSnapshotLink1;
                myResult.TopProjectSnapshotLink2 = k.TopProjectSnapshotLink2;
                myResult.TopProjectSnapshotLink3 = k.TopProjectSnapshotLink3;

                myResult.TotalProjectAmt = string.Format("{0:C}", k.TotalProjectAmt);
                myResult.TotalProjectCount = k.TotalProjectCount;

            }
        }

        // send object to partial view
        return PartialView("GetAreaSelTexResult", myResult);
    }

这是局部视图:

代码语言:javascript
运行
复制
@model PAA.Models.AreaSelTextResult
<p>@Model.TotalProjectCount projects</p>
<p>@Model.TotalProjectAmt total</p>

<p>
   <a href="@Model.TopProjectSnapshotLink1">@Model.TopProjectName1</a></p>
<p>
   <a href="@Model.TopProjectSnapshotLink2">@Model.TopProjectName2</a></p>
<p>
   <a href="@Model.TopProjectSnapshotLink3">@Model.TopProjectName3</a></p>

下面的javascript调用HttpPost方法,然后将返回的局部视图加载到名为“returnedProjData”的div中:

代码语言:javascript
运行
复制
function retrieveSelectionSummary(selectionName, selectionType) {

    $('#goalList input:checked').each(function () {
        goals += $(this).attr('value') + ",";
    });

    var attr = { areaName: selectionName,
        areaType: selectionType,
                yearCDL: null,
                goalCDL: null,
                statusCDL: status
                };

    var json = JSON.stringify(attr);
    $.ajax({
        url: '/summary/GetAreaSelTexResult',
        type: 'POST',
        dataType: 'html',
        data: json,
        contentType: 'application/json; charset=utf-8',
        success: function (result) {
            $('#returnedProjData').html(result);
        },
        error: function () {
            alert("Error.");
        }
    });
    return attr;
}
EN

Stack Overflow用户

回答已采纳

发布于 2012-01-27 23:36:51

永远不要像这样硬编码urls:

代码语言:javascript
运行
复制
url: '/summary/GetAreaSelTexResult',

在生成url时始终使用url helper:

代码语言:javascript
运行
复制
url: '@Url.Action("GetAreaSelTexResult", "summary")',

当您在虚拟目录中部署代码时,代码不能正常工作的原因是url /summary/GetAreaSelTexResult不再正确。现在必须考虑虚拟目录名:/myappname/summary/GetAreaSelTexResult。出于这个原因,你永远不应该硬编码你的url,而总是使用url helper来生成它们。

如果这是在一个单独的javascript文件中,您不能使用服务器端帮助器,您可以在视图中定义一个全局变量,该变量将指向正确的url,或者在您正在使用的某些DOM元素上使用HTML5 data-*帮助器。

票数 10
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9029714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档