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



在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);

如何获取ID?从一些路由数据,或Url,还是让jQuery的前端发帖传递它?

是否有可能从动作方法中获得ID而不从前端html页面传递?

首先,url中控制器名前面缺少斜杠:

"/Home/Toggle"

下一个错误是复选框值不能通过val()方法检查,但可以使用

检查
$("#checkbox").is(':checked')

接下来,你必须在url后面附加id,因为它在routeconconfig .cs文件中的RegisterRoutes方法中映射为"controller/action/{id}"。

所以你最终正确的url是:
"/Home/Toggle/{id}"  //in your case: "/Home/Toggle/4"

Action方法中的"id"参数也缺失了。更正动作方法为:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public void Toggle(bool checkbox, int id)
    {
    }

完整的Jquery代码是:

$.post("/Home/Toggle/4", { checkbox: $("#checkbox").is(':checked') }, function (data) {
            });

在您的脚本中,分配id

var id = '@Model.ID';

然后在回复时包含

$.post("Home/Toggle", { checkbox: $("#checkbox").val(), ID: id }, function (data) { ...

并将post方法调整为

public ActionResult Toggle(int ID, bool checkbox)
{
  ....

这完全取决于你的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) {
});

如果你的url是这个Home/Details/4,那么你可以得到'id'为:-

 public ActionResult Toggle(bool checkbox, int? id) //<----get 'id' this way
 {}

您需要在ajax post函数中更改为id,并将id添加到Toggle函数或添加新的Toggle函数,并将id作为参数。如果你想在post函数中保持值,你需要添加一个新的路由

最新更新