如何在帖子操作中获取网址“controller / action / id”中的{ID}?

时间:2014-08-23 06:04:42

标签: asp.net asp.net-mvc asp.net-mvc-5

在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页面传递?

5 个答案:

答案 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)

如果您的urlHome/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函数中保持值,你需要添加一个新的路由