我尝试在点击时将<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?
});
}
控制器:
Dibbuging值“Nothing”:
答案 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如何使用它。