【问题标题】:How to get {ID} in url "controller/action/id" in a post action?如何在 post 操作中获取 url “controller/action/id”中的 {ID}?
【发布时间】:2016-02-01 17:24:17
【问题描述】:

在 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贴传过去?

是否可以在不从html前端页面传递的情况下从action方法中获取ID?

【问题讨论】:

  • 我认为这就是您想要的,如果需要更多帮助然后发表评论...
  • 不清楚 bool 在你的操作中做了什么?你用的路由/Controller/Action/Id,应该是/Controller/Action/Bool/Id吧?我的意思是你想同时传递这两个值?
  • -1。多解释一下你的情况。您的 html 中有和 Id。为什么你不想用 jquery 传递它?

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


【解决方案1】:

首先,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”参数。更正的Action方法是:

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

    }

您的完整和更正的 Jquery 代码是:

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

            });

【讨论】:

    【解决方案2】:

    在您的脚本中,分配 id

    var id = '@Model.ID';
    

    然后在发回时包含它

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

    并将您的发布方法调整为

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

    【讨论】:

    • 是否可以从action方法中获取ID而不需要从html前端页面传递过来?
    • 除非你的申请是通灵的
    • 在低http协议级别,id可能可以在refer中找到。
    • @dc7a9163d9,如果客户端从不发送id,服务器如何读取它?
    【解决方案3】:

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

    您的帖子应如下所示。请注意,这是在使用隐藏输入“存储”方法时。

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

    【讨论】:

      【解决方案4】:

      如果您的urlHome/Details/4,那么您可以得到'id' 为:-

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 如果你的意思是如何通过 id=4 你应该在你的 post 函数中添加 id:4 在复选框之后
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 1970-01-01
        相关资源
        最近更新 更多