我确信这是关于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方法在后续调用中创建不同的路径。 斯科特
答案 0 :(得分:3)
Url.Action
部分基于用于生成请求的当前网址。如果请求是/
,那么所有生成的网址都将是因为它与您所在的网页相同。如果您要使用其他controller
或action
,则会生成仅包含您指定值的网址。
例如:转到/home/action/1
在该视图上有Url.Action("action", "home")
生成的路径将是同一页面,因此只使用传递的URL而不是生成新的URL。 (现在我看到了奇怪的行为)
不幸的是,我所知道的唯一解决方案是执行以下操作
@Url.Action("DeletePhone", "Player", new { id = UrlParameter.Optional })
(假设您使用的是默认路线{id}
是参数名称