C# ASP.NET MVC DropDownList导致了我不希望出现的回发—似乎源于JavaScript
我在MVC项目中有一个标准表单,其中有一个DropDownList。当我更改dropdownlist的值时,整个页面会重新加载,因为它会导致回发 我不希望出现这种行为,我正试图阻止dropdownlist进行回发 然而,这就是它变得奇怪的地方。我用以下方式定义我的dropdownlist:C# ASP.NET MVC DropDownList导致了我不希望出现的回发—似乎源于JavaScript,c#,javascript,jquery,asp.net,asp.net-mvc,C#,Javascript,Jquery,Asp.net,Asp.net Mvc,我在MVC项目中有一个标准表单,其中有一个DropDownList。当我更改dropdownlist的值时,整个页面会重新加载,因为它会导致回发 我不希望出现这种行为,我正试图阻止dropdownlist进行回发 然而,这就是它变得奇怪的地方。我用以下方式定义我的dropdownlist: @Html.DropDownList("sortOrder", null, new { onchange = "startUpdate(this)" }) 忽略Javascipt,没有什么能指望我回发邮件。
@Html.DropDownList("sortOrder", null, new { onchange = "startUpdate(this)" })
忽略Javascipt,没有什么能指望我回发邮件。如果我们将整个表格包括在内,我们可以在这里看到同样的情况:
@using (var form = Html.BeginForm("Query", "Search", FormMethod.Get, new { id="queryform", name="queryform", onsubmit = "startUpdate(this); return false;"}))
{
<b>Sorter efter</b><br />
@Html.DropDownList("sortOrder", null, new { onchange = "startUpdate(this)" })<br />
</div>
<br />
<input type="submit" class="button_green" value="Søg igen ►" id="SearchButton" name="SearchButton" style="float: left;" onclick="_gaq.push(['_trackEvent', 'Ads_listing', 'search_again_click']); startUpdate(this); return false;" />
<input type="reset" class="button_small" value="Nulstil" id="ClearButton" style="float: right;" />
</text>
}
我迷路了。我已经搜索了几个小时了,但我找不到导致回发的愚蠢的JS。有什么想法吗?这将是一个巨大的帮助
编辑:
代码中引用了启动日期。我试图删除它,但仍然得到了回复。下面是代码:
function startUpdate(sender) {
if (tmr != null) clearTimeout(tmr);
tmr = setTimeout("updateSearch()", 700);
}
function updateSearch() {
tmr = null;
searchParams.transactiontype = $("input[name=transactionType]:checked").val();
searchParams.text = $("input[name=text]").val();
var sct = "";
$("input[name=sectors]:checked").each(function() { sct += $(this).val() + ","; });
searchParams.sector = sct;
searchParams.allsectorsrequired = $("#allSectorsRequired").attr("checked") == "checked" ? "true" : "";
var rgn = "";
$("input[name=regions]:checked").each(function() { rgn += $(this).val() + ","; });
searchParams.region = rgn;
var orgn = "";
$("input[name=operatingRegions]:checked").each(function() { orgn += $(this).val() + ","; });
searchParams.operatingregion = orgn;
searchParams.alloperatingregionsrequired = $("#allOperatingRegionsRequired").attr("checked") == "checked" ? "true" : "";
searchParams.priceFrom = $("input[name=priceFrom]").val();
searchParams.priceTo = $("input[name=priceTo]").val();
searchParams.yearFrom = $("input[name=yearFrom]").val();
searchParams.yearTo = $("input[name=yearTo]").val();
searchParams.canMove = $("input[name=canMove]:checked").val();
searchParams.financingavailable = $("input[name=financingAvailable]:checked").val();
searchParams.orderby = $("select[name=sortOrder]").val();
for (var key in searchParams) {
if ((!psp || psp[key] != searchParams[key]) && searchParams[key]) {
_gaq.push(['_trackEvent', 'Vbørs Søg autoupdate', key, searchParams[key]]);
}
}
psp = $.extend({}, searchParams);
$("#searchResults").load("@Url.Action("SearchJSON", "Search")", searchParams, searchCallback);
var tttxt = " til salg";
if (searchParams.transactiontype != 2) tttxt = " købes";
if (searchParams.text.length > 0) {
$("#searchtitle").text(searchParams.text + tttxt);
document.title = searchParams.text + tttxt;
}
}
根据我在评论中发布的内容,不知何故,您可能知道在代码中发生这种情况的地方您的onchange事件处理程序正在被更改,从startUpdatethis更改为top.location.href=sortLink.replace{sortOrder},this.value
因此,当select更改时,它将替换页面URL,这显然会导致GET刷新。StartUpdatethis-它在哪里?onchange=StartUpdatethis正在调用javascript,但我没有在页面上的任何位置直接看到该方法,因此它必须存在于这些文件中/Assets/js/global.js?2.0或/user/infobox?635467592356980146Hey伙计们:我粘贴的代码是一个版本,在这个版本中,我试图删除所有JavaScript。删除该方法什么都没做,但我仍然得到了回发。您可以在以下链接中看到生产上的方法:打开浏览器控制台窗口,检查网络选项卡以查看调用的内容。@MelanciaUK它可以访问同一URL-但是,这就是问题所在-它不应该访问同一URL!如果GET是作为AJAX生成的,则可以,但不应重定向页面。您可以通过更改上的选择/选项来尝试自己;
function startUpdate(sender) {
if (tmr != null) clearTimeout(tmr);
tmr = setTimeout("updateSearch()", 700);
}
function updateSearch() {
tmr = null;
searchParams.transactiontype = $("input[name=transactionType]:checked").val();
searchParams.text = $("input[name=text]").val();
var sct = "";
$("input[name=sectors]:checked").each(function() { sct += $(this).val() + ","; });
searchParams.sector = sct;
searchParams.allsectorsrequired = $("#allSectorsRequired").attr("checked") == "checked" ? "true" : "";
var rgn = "";
$("input[name=regions]:checked").each(function() { rgn += $(this).val() + ","; });
searchParams.region = rgn;
var orgn = "";
$("input[name=operatingRegions]:checked").each(function() { orgn += $(this).val() + ","; });
searchParams.operatingregion = orgn;
searchParams.alloperatingregionsrequired = $("#allOperatingRegionsRequired").attr("checked") == "checked" ? "true" : "";
searchParams.priceFrom = $("input[name=priceFrom]").val();
searchParams.priceTo = $("input[name=priceTo]").val();
searchParams.yearFrom = $("input[name=yearFrom]").val();
searchParams.yearTo = $("input[name=yearTo]").val();
searchParams.canMove = $("input[name=canMove]:checked").val();
searchParams.financingavailable = $("input[name=financingAvailable]:checked").val();
searchParams.orderby = $("select[name=sortOrder]").val();
for (var key in searchParams) {
if ((!psp || psp[key] != searchParams[key]) && searchParams[key]) {
_gaq.push(['_trackEvent', 'Vbørs Søg autoupdate', key, searchParams[key]]);
}
}
psp = $.extend({}, searchParams);
$("#searchResults").load("@Url.Action("SearchJSON", "Search")", searchParams, searchCallback);
var tttxt = " til salg";
if (searchParams.transactiontype != 2) tttxt = " købes";
if (searchParams.text.length > 0) {
$("#searchtitle").text(searchParams.text + tttxt);
document.title = searchParams.text + tttxt;
}
}