我想在我的控制器中调用一个动作,通过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);
});
});
答案 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,两者混合通常会导致难以理解的混乱。