@ Url.Action在后续调用中返回不同的结果

时间:2011-08-18 17:04:51

标签: jquery asp.net-mvc-3

我确信这是关于jQuery / MVC3的东西,我还没想到,所以如果有人能告诉我为什么会这样。

当我多次调用一个动作例程时,@ Url.Action例程会返回不同的字符串。

以下作品无论被调用多少次都会有效。

function DeletePhone( delId )
{
    var va = $("#idPhoneNumberView *").serializeArray();
    $.ajax({
        url: '@Url.Action( "DeletePhone", "Player")/' + delId,
        data: JSON.stringify(va),
        type: 'POST',
        contentType: 'application/json',
        dataType: 'html',
        success: function (resp)
        {
            var ev = document.getElementById("idPhoneNumberView");
            ev.innerHTML = resp;
        },
        error: function (x)
        {
            alert(x.status);
        }
    });
};

此例程仅在第一次使用。

function DeletePhone( delId )
{
    var va = $("#idPhoneNumberView *").serializeArray();
    $.ajax({
        url: '@Url.Action( "DeletePhone", "Player")/' + delId,
        data: JSON.stringify(va),
        type: 'POST',
        contentType: 'application/json',
        dataType: 'html',
        success: function (resp)
        {
            $("#idPhoneNumberView").html(resp);
        },
        error: function (x)
        {
            alert(x.status);
        }
    });
};

第一次通话时,网址为“/ Mvc / Player / DeletePhone / 0” 在后续调用中它是“/ Mvc / Player / DeletePhone / 0/0”,因为在第一次调用之后我从错误函数显示了404,这在给定url时是可以理解的。

当我使用jQuery $(“#idPhoneNumberView”)。html(resp)时,处理方式不同,所以如果有人能让我加快速度,我们将不胜感激。

我想确定我对此很清楚。 代码中唯一的区别是工作和不工作的区别是使用jQuery而不是直接在success函数中使用getElementById。

我不明白如何使用jQuery html方法导致@ Url.action方法在后续调用中创建不同的路径。 斯科特

1 个答案:

答案 0 :(得分:3)

Url.Action部分基于用于生成请求的当前网址。如果请求是/,那么所有生成的网址都将是因为它与您所在的网页相同。如果您要使用其他controlleraction,则会生成仅包含您指定值的网址。

例如:转到/home/action/1在该视图上有Url.Action("action", "home")生成的路径将是同一页面,因此只使用传递的URL而不是生成新的URL。 (现在我看到了奇怪的行为)

不幸的是,我所知道的唯一解决方案是执行以下操作

@Url.Action("DeletePhone", "Player", new { id = UrlParameter.Optional })

(假设您使用的是默认路线{id}是参数名称