在cshtml文件中,我在Home/Details/4
中有以下javascript。 4是ID。
<script>
$(document).ready(function () {
$("#checkbox").click(function () {
$.post(
"Home/Toggle",
{ checkbox: $("#checkbox").val() },
function (data) {
});
});
});
</script>
以下是控制器中的操作代码。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Toggle(bool checkbox)
{
...... // How to get ID?
var x = db.XXXX.Find(id);
如何获取身份证?从一些路由数据或Url,或让前面的jQuery发布传递它?
是否可以从操作方法获取ID而不从前面的html页面传递?
答案 0 :(得分:3)
首先删除url中控制器名称之前的斜杠:
"/Home/Toggle"
下一个错误是使用val()方法无法检查复选框值,但可以使用以下方法检查:
$("#checkbox").is(':checked')
接下来,您必须在url之后附加id,因为它在RegisterRoutes方法的RouteConfig.cs文件中映射为“controller / action / {id}”。
所以你最后的正确网址是:
"/Home/Toggle/{id}" //in your case: "/Home/Toggle/4"
在Action方法中,“id”参数也缺失。 Corrected Action方法是:
[HttpPost]
[ValidateAntiForgeryToken]
public void Toggle(bool checkbox, int id)
{
}
您的完整和更正的Jquery代码是:
$.post("/Home/Toggle/4", { checkbox: $("#checkbox").is(':checked') }, function (data) {
});
答案 1 :(得分:2)
如果您的url
是Home/Details/4
,那么您可以'id'
作为: -
public ActionResult Toggle(bool checkbox, int? id) //<----get 'id' this way
{}
答案 2 :(得分:2)
在您的脚本中,指定ID
var id = '@Model.ID';
然后在发回时加入
$.post("Home/Toggle", { checkbox: $("#checkbox").val(), ID: id }, function (data) { ...
并将您的帖子方法调整为
public ActionResult Toggle(int ID, bool checkbox)
{
....
答案 3 :(得分:2)
这完全取决于你的html是什么样的?您可能希望将您的ID保存为隐藏或data-some-name
到html元素。
@Html.HiddenFor(Model => Model.NameId)
或
<div class="some-class" data-id="@Model.NameId"></div>
您的操作应该采用您想要传递的两个参数(或者查看模型)。
public ActionResult Toggle(bool checkbox, int id)
{
你的帖子应该是这样的。请注意,这是使用隐藏输入“store”方法时。
$.post("Home/Toggle", { checkbox: $("#checkbox").val(), id: $('.NameId').val() }, function (data) {
});
答案 4 :(得分:1)
你需要在你的ajax post函数中更改为id并将id添加到Toggle函数或添加id为参数的新toggle函数。 如果你想在post函数中保持值,你需要添加一个新的路由