通过Ajax.ActionLink传递用户输入并设置url参数

问题描述:

那么,我只想传递用户输入而不使用显式的jQuery ajax方法。我的想法是以下几点:试图用Ajax.ActionLink并为AJAX必要参数之前Ajax的本身:通过Ajax.ActionLink传递用户输入并设置url参数

@Ajax.ActionLink("Call date", "CallingHistory", "Member", new {sortOrder = ViewBag.DateSortParam, pageNumber = ViewBag.PageNumber}, new AjaxOptions {UpdateTargetId = "historytable", HttpMethod = "get", OnBegin = "SetUrlParameters"}, new {id = "calldatetimelink"}) 

,并设立行动网址参数的js代码:

<script> 
function setUrlParameters() { 
    var k = 0; 
    this.href = this.href + "?includedialling=" + $("#chBox1").val(); 
    this.href = this.href + "?includeincomingmissedcalls=" + $("#chBox2").val(); 
    this.href = this.href + "?includeoutcomingmissedcalls=" + $("#chBox3").val(); 
} 
</script> 

操作方法签名看起来像这样:

public Task<ActionResult> CallingHistory(string sortOrder, int pageNumber, bool? includedialling, 
     bool? includeincomingmissedcalls, bool? includeoutcomingmissedcalls){...} 

注意,JS-方法之前Ajax的请求来执行。有可能这样做吗?我一直想把断点设置为js-method,但在chrome web-tools中看不到它。提前致谢。

UPDATE: 叶先生,觉得这应该工作,但是我改变的参数脚本事业无限的方式加:

function setUrlParameters(data) { 
    var oldref = data.href; 
    var par1 = '&includedialling=' + $("#chBox1").is(":checked"); 
    var par2 = '&includeincomingmissedcalls=' + $("#chBox2").is(":checked"); 
    var par3 = '&includeoutcomingmissedcalls=' + $("#chBox3").is(":checked"); 

    var arr = data.href.split('&'); 
    var resultUrl = arr[0] + arr[1] + par1 + par2 + par3; 
    $("#calldatetimelink").href = resultUrl; 
} 

,并得到连接错误在Chrome网上应用工具:

GET localhost:50307/Views/Shared/Partial/Member/CallingHistory.cshtml?X-Requested-With = XMLHttpRequest & _ = 1409287722659 404(Not Found)

在调试器脚本显示resultUrl变量的这样的值:

//本地主机:50307 /会员/ CallingHistory中将sortOrder = datepageNumber = 1个& includedialling =假& includeincomingmissedcalls =真& includeoutcomingmissedcalls =假。 - 一切都很好。但最终我还没有得到结果。这个字符串'X-Requested-With = XMLHttpRequest & _ = 1409287722659'从哪里出现?显然,这是浏览器的行为。

Yes..In你的问题,你在呼唤setUrlParameters以正确的方式,但使用的是thissetUrlParameters功能,你没有提供它做的却是这样的:

@Ajax.ActionLink("Call date", "CallingHistory", "Member", new {sortOrder = 
ViewBag.DateSortParam, pageNumber = ViewBag.PageNumber}, new AjaxOptions 
{UpdateTargetId = "historytable", HttpMethod = "get", OnBegin = 
"SetUrlParameters(this)"}, new {id = "calldatetimelink"}) 

<script> 
function setUrlParameters(data) { 
    var link; 
    link = data.href + "&includedialling=" + $("#chBox1").is(':checked') + "&includeincomingmissedcalls=" + $("#chBox2").is(':checked') + "&includeoutcomingmissedcalls=" + $("#chBox3").is(':checked'); 
    $("#calldatetimelink").attr('href',link) 
} 
</script> 

和不忘记在您的页面或布局页面中包含'jquery.unobtrusive-ajax.min.js'文件。

+0

谢谢,例外。我只是jquery的新手。 – Ryan 2014-08-28 09:38:39

+0

@ Rayan..problem解决.. ??? – 2014-08-28 10:11:36

+0

OnBegin js函数被触发,我看到url参数已设置,但在服务器端方法获取空值。 – Ryan 2014-08-29 02:39:15