【问题标题】:Transferring an int from view to controller in C# using Ajax使用 Ajax 在 C# 中将 int 从视图传输到控制器
【发布时间】:2015-10-26 08:49:36
【问题描述】:

我想将一个整数从我的视图传输到我的控制器。我正在使用 Ajax 来执行此操作,下面是我的 html 代码:

<input type="button" class="btn btn-default" value="Yes" id="return"
onclick="returnBook(@item.BookID);"/>

我的 ajax:

function returnBook(id) {
console.log(id);
var bookID = id;
var url= '/AuthenticatedUser/ReturnBook';
$.ajax({
    url: url,
    type: 'POST',
    data: bookID,
    success: function (results) {
    }
});

}

我的控制器:

[HttpPost]
    public ActionResult ReturnBook(string id)
    {
        return View();
    }

在我的控制器中,当我使用字符串时,会调用该方法,但 id 仍设置为 null。但是,如果我使用“int id”,则根本不会调用该方法,并且会收到 500 错误。知道如何将 id 从视图传递到控制器吗?

【问题讨论】:

  • 您是否使用了一些额外的库或框架?因为一般情况下,字符串@item.BookId不会神奇地被某个字段的值替换。一般来说,你必须从你的表单中获取它,例如&lt;input type='hidden' id='bookId' value='...' /&gt;,然后是returnBook(document.getElementById("bookId").value)(或者$('#bookId'),如果你使用jQuery作为你的标签)。

标签: c# jquery ajax


【解决方案1】:

改为发送一个对象:

data: { id:bookID },

现在您可以在控制器中使用该对象的键 id 来获取它的值。

【讨论】:

    【解决方案2】:

    MVC 会自动尝试将从您的网页传递的数据值与您的控制器中声明的参数相匹配。

    因此,当您发送变量 bookID 时,MVC 将尝试将其与控制器参数列表中名为 bookID 的变量匹配。由于该参数不存在,因此忽略关联的值。

    要解决您的问题,您可以将控制器声明更改为 -

    public ActionResult ReturnBook(string bookId)
    

    或将您的数据声明更改为任一

    data: id,
    

    或者(正如 Jai 建议的那样)-

    data: { id:bookID },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-08
      • 2016-07-08
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 2020-02-11
      相关资源
      最近更新 更多