【问题标题】:nothing inserting with ajax post mvc4ajax post mvc4没有插入
【发布时间】:2013-08-28 15:18:34
【问题描述】:

即使我对值进行硬编码,也没有插入任何内容。我可以使用创建 Transaction 类时创建的方法还是必须为 ajax 调用编写自定义方法?

jQuery/ajax 调用

$("#SubmitTransaction").on("click", function () {
var div = $("#AddedItems");

var uid = $("#getUser").attr("data-logName");
var TUid = $("#uid").attr("data-tID");
var TId = $('#TiD').attr("data-tID");
var ids = $("#AddedItems li").map(function () { return this.id }).get();

var trade = {
    FromUserID: uid,
    TID: TUid,
    itemTForId: TItemId,
    items: ids
}
$.ajax({
    type: "POST",
    url: "/Transaction/Create",
    data: trade

   });
});

控制器:我想如果我通过 Transaction 就可以了

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Transactions transaction)
    {
        if (ModelState.IsValid)
        {
            db.Transactions.Add(transaction);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(transactions);//not really concerned with where it goes right now
    }                             //just want to get the values in the db

交易模型

       public class Transactions
{


    // all the properties
    //
    //
    public ICollection<Item> items { get; set; }//this is not being stored

}

【问题讨论】:

  • 尝试在动作参数变量名中传递trade
  • public ActionResult Create(Transactions trade)
  • 哦,在actionResult。我对你在说什么感到困惑
  • 不,没什么。到处都是空
  • 再尝试一件事,传递为 $.ajax({ type: "POST", url: "/Transaction/Create", data: JSON.stringify(trade) });

标签: jquery ajax asp.net-mvc-4


【解决方案1】:

由于您使用ValidateAntiForgeryToken 属性,您的ajax 请求必须 包含@Html.AntiForgeryToken() 生成的令牌。例如:这是您的表单:

<form>
@Html.AntiForgeryToken()

//other field
</form>

@Html.AntiForgeryToken() 默认会渲染一个带有name="__RequestVerificationToken" 的隐藏字段。您可以按如下方式尝试您的 ajax:

var trade = {
    FromUserID: uid,
    ToUserID: TUid,
    itemTradedForId: TItemId,
    items: ids,
    __RequestVerificationToken: $("[name='__RequestVerificationToken']").val()
}

$.ajax({
    type: "POST",
    url: "/Transaction/Create",
    contentType: 'application/json; charset=utf-8',                     
    data: JSON.stringify(trade)
   });
});

同时指定contentType: 'application/json; charset=utf-8'JSON.stringify(trade)

【讨论】:

  • 是在交易对象中传递的还是在 post 变量之一中传递的?
  • 好的,这会将值放入事务表中,但 ids 没有被存储。当我使用alert 输出值以确保正在发送某些内容时,我得到了ids = ,,4,5。 4之前的那两个逗号是什么意思?发生在所有值上
  • 我用 ICollection 添加了我的事务类。那些没有被存储
  • @healix:问题可能出在$("#AddedItems li").map(function () { return this.id }).get(); 这一行。请检查您在此处尝试的内容。 (可能有空值的li
  • @healix: 是的,如果你没有表单,把它放在html页面的任何地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多