值未正确传递给控制器​​

时间:2017-01-20 13:03:18

标签: jquery asp.net-mvc

我尝试在点击时将<td>字符串值传递给控制器​​。 这是我的JS功能:

function postCardNumber(elm) {                
    var CardNumber = $(elm).closest("tr").find(".card-number").html();
    alert(CardNumber); //Check, goes ok, display the correct <td> value number
    $.post("/CreditCard/ShowImage", CardNumber, function (response) {    
        alert(response); //the controller response is VB value "Nothing". Cant understand why?
    });
}

控制器:

enter image description here

Dibbuging值“Nothing”:

enter image description here

2 个答案:

答案 0 :(得分:1)

您的操作方法参数名称为cardNumber。因此,当您发送数据时,请使用该密钥发送数据,以便将值正确映射到您的操作方法参数变量。

 var cardNumber = $(elm).closest("tr").find(".card-number").html();
 $.post("/CreditCard/ShowImage", { cardNumber :cardNumber }, function (response) {
     //to do : Do something with response
 });

虽然这段代码可能对您有用,但我强烈建议您不要简单地发送html()方法returns.html方法来返回元素的html标记。如果您明天向此添加子跨度,你必须回来再次修复你的代码!

如果您只是想发送cardNumber(字符串值),您可以使用html 5属性将其保存在div中并读取该值并发送。

<div data-cardnumber="myCard number" class="card-number">
  <p>I can have any markup here</p>
</div>

现在在客户端代码中阅读

var cardNumber = someSelectorHere.find(".card-number").data("cardnumber");

假设您的find(".card-number")只返回一个项目的数组。

我还建议您始终使用适当的数据类型。如果您要传递数值,请使用数字类型(int / long)作为方法参数,以避免以后进行不必要的转换!

答案 1 :(得分:0)

您错过了Ajax-Request中参数的名称。变化

$.post("/CreditCard/ShowImage", $(elm).closest("tr").find(".card-number").html(), function (response) {

 var postBody = {
    cardNumber: $(elm).closest("tr").find(".card-number").html()
 };
 $.post("/CreditCard/ShowImage", { cardNumber: cardNumber }, function (response) {

也许它还需要使用[FromBody]属性来告诉ASP.NET它可以在POST正文中找到Id,而不是像通常情况那样作为URL参数。请参阅第二段中描述的https://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api如何使用它。