使用JQuery中的参数重定向操作

时间:2013-12-04 12:05:03

标签: javascript jquery asp.net redirect

在我的ASP.Net项目中,我尝试在选择行表并单击按钮后将页面重定向到其他操作。所以我有这个代码:

JQuery的:

    function editItem(tableId, url) {
            if ($("#" + tableId + " .selected").exists()) {

                var thisRowId = $("#" + tableId + " .selected").attr("id");

                window.location.replace(url, { operation: "edit", carId: thisRowId });
            }
        };

    //more code

查看(ManagementCar):

@model myProject.Model.Car.Car[]

<table class="table" id="tableCars">
    <thead>
        @*some code to header*@
    </thead>
    <tbody>
            foreach (var item in Model)
            {
            <tr id="@(item.Id)" onclick="selectRow('tableCars', '@(item.Id)')">
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.OwnerName)
                </td>
                <td>
                    @(item.IsSold == true ? "Yes" : "No")
                </td>
            </tr>
            }
    </tbody>
</table>
<br />
<button id="btEdit" type="button" class="disable" onclick="editItem('tableCars','CarOperation')">
    Edit</button>

控制器:

        [HttpGet]
        public ActionResult CarOperation(string operation, int carId)
        {
            //some code...

            return RedirectToAction("ManagementCar", "Backoffice");
        }

但重定向后说carId参数为null后我有服务器错误。我调试我的jquery,该参数不为null。我也尝试过做

$.get(url, { operation: "edit", carId: thisRowId });

而不是

window.location.replace(url, { operation: "edit", carId: thisRowId });

但它没有重定向。 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

通过给它一个像这样的新值来设置它。

window.location = window.location.replace(url, "shouldBeAstringNotAJsonObject");

答案 1 :(得分:0)

好的,我终于用新的url路由配置和以下代码解决了这个问题:

我的RouteConfig:

routes.MapRoute(
            name: "ManipulatingCar",
            url: "{controller}/{action}/{operation}/{carId}"
        );

我的JQuery:

editItem = function (tableId, url) {
    if ($("#" + tableId + " .selected").exists()) {

        var thisRowId = $("#" + tableId + " .selected").attr("id");

        var fullUrl = url + "/edit/" + thisRowId;

        window.location = fullUrl;
    }
};

基本上,控制器操作参数必须与RouteConfig.cs

中指定的配置匹配

答案 2 :(得分:0)

使用window.location的问题是引用者未在请求中传递,因为此行为只是模仿新请求,就像您在地址栏中键入了URL一样。如果您打算使用网站分析,可靠的推荐人将非常重要。我使用jQuery生成一个动态链接,我在其上调用click()

var url = '/my/url';
$('<a href="' + url + '"></a>')[0].click();

注意我click()底层元素不是jQuery选择对象,原因是jQuery单击只引发事件并且href未导航到,而索引到元素并单击它将导致相同的行为你会期望好像你实际上点击了页面上的链接。

我已经整理了一个jQuery.navigate plugin,它整齐地将它包装起来,并将您的站点地图从您的UI逻辑中抽象出来,您可能会发现它很有用。例如,使用我的插件意味着您可以完全删除editItem功能,只需将标记更改为此类标记即可?

<tr id="@(item.Id)" onclick="$.navigate('to', 'edit', { id : '@(item.Id)' })">