通过jquery将cshtml字段值传递给url.action

时间:2014-06-27 01:11:01

标签: jquery asp.net-mvc

我想在我的控制器中调用一个动作,通过routeValues传递参数。我知道如何用文字来做,但我不能使用当前页面上的字段值来做。 我尝试过以下方法:

$('#btnAdmDel').click(function () {
                    $.get('@Url.Action("deleteAdm", "SuperUser", new {id=$('#tbSeek').val()  })', function (data) {
                        $('#partials').html(data);
                    });
                });

但这不会起作用,因为它表示'#btnAdmDel'字符太多,因为它将其理解为c#代码,而char变量只有一个字符。然后我尝试了这个:

$('#btnAdmDel').click(function () {
                    $.get('@Url.Action("deleteAdm", "SuperUser", new {id=$("#tbSeek").val() })', function (data) {
                        $('#partials').html(data);
                    });
                });

相同的代码,但将撇号更改为引号,将char更改为string,但随后又说明了' $'就在它之前,是一个意外的角色。所以我尝试了这个:

$('#btnAdmDel').click(function () {
                    var param = $('#tbSeek').val();
                    $.get('@Url.Action("deleteAdm", "SuperUser", new {id=param})', function (data) {
                        $('#partials').html(data);
                    });
                });

现在我尝试通过变量param传递值,但它表示在该上下文中不知道名称param

我确定必须有办法做到这一点,但我似乎并没有意识到如何做到这一点。为了澄清这一点,我尝试将输入中的文本值用作routeValue操作中的deleteAdm。 请帮忙。感谢。


编辑: 忘了提一下,我尝试访问的字段不在我所在的实际页面上,但是在之后加载的局部视图中,就像我点击的按钮一样,我不知道这是否有帮助。


查看代码:

@model pedidosOnlineMVC.Models.SuperUser
@{
    ViewBag.Title = "MySystem";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Administration</h2>
@Html.AntiForgeryToken()
@using(var p = Html.Bootstrap().Begin(new Panel()))
{   
    using (p.BeginBody())
    {
        @Html.Bootstrap().Button().Text("Register new  administrator").Id("btnReg")
        @Html.Bootstrap().Button().Text("List administrators").Id("btnList")
        @Html.Bootstrap().Button().Text("Search administrator").Id("btnSeek")   
        using (var ip = Html.Bootstrap().Begin(new Panel()))
        {
            using (ip.BeginBody())
            {
                <div id="partials">
                </div>
            }
        }     
    }
}

部分查看代码:

@model IEnumerable<pedidosOnlineMVC.Models.Administrator>
@using (var t = Html.Bootstrap().Begin(new Table()))
{
    using (var h = t.BeginHeader())
    {
        using(var hr = h.BeginHeaderRow())
        {
            @hr.Cell("Name")
            @hr.Cell("Registration")
            @hr.Cell("Phone")
            @hr.Cell("Establishment")
            @hr.Cell("Select")
            @hr.Cell("Delete")
        }
    }
    foreach (var adm in Model)
    {
        using (var r = t.BeginRow())
        {
            @r.Cell(adm.name)
            @r.Cell(adm.reg)
            @r.Cell(adm.phone)
            if (adm.est!=null)
            {
                @r.Cell(adm.est.name)
            }
            else
            {
                @r.Cell("")
            }
            @r.Cell(Html.Bootstrap().Button().Text("Select").Id("btnAdmSelect"))
            @r.Cell(Html.Bootstrap().Button().Text("Delete").Id("btnAdmDel")).Data(new { del = adm.Administrator_Id})
        }
    }
}

我改变了代码的方式,所以现在我从点击的按钮中获取数据值。 java脚本现在是这样的:

$('#btnAdmDel').click(function () {
                        $.get(@Url.Action("deleteAdm", "SuperUser")+'?id='+$('#btnAdmDel').data('del'), function (data) {
                            $('#partials').html(data);
                        });
                    });

2 个答案:

答案 0 :(得分:4)

您无法将值从javascript传递到在Razor中运行的方法,因为剃刀代码在呈现页面之前在服务器上运行,并且javascript代码在客户端上运行。这意味着你无法直接将javascript值传递给razor方法,但是为了实现你想要的,你可以在razor中构建没有参数的链接,然后在需要时将其附加到javascript中:

$('#btnAdmDel').click(function () {
    $.get('@Url.Action("deleteAdm", "SuperUser")' + '?id=' + $('#tbSeek').val(), function (data) {
        $('#partials').html(data);
    });
});

剃刀代码在页面呈现之前运行,因此如果您查看源(呈现页面),您将得到类似的内容:

$('#btnAdmDel').click(function () {
    $.get('http://example.com/SuperUser/deleteAdm' + '?id=' + $('#tbSeek').val(), function (data) {
        $('#partials').html(data);
    });
});

然后当点击事件被触发时,它会将?id=和值附加到要获取的网址。了解Razor和JavaScript代码的执行时间至关重要。

答案 1 :(得分:0)

考虑将URL填入html数据属性,然后使用jQuery获取它。你已经用id值做了类似的事情。

<button id="btnAdmDel" data-url="@Url.Action("deleteAdm", "SuperUser")">Click</button>

$('#btnAdmDel').click(function () {
    var id = $('#tbSeek').val();
    var url = $(this).data("url");
    $.get(url + "/" + id, function (data) {
        $('#partials').html(data);
    });
});

这让Razor帮助程序可以解析你的URL,同时保持你的javascript Razor-free,两者混合通常会导致难以理解的混乱。