【问题标题】:How to binding model with ajax correctly如何正确绑定模型和ajax
【发布时间】:2015-12-06 14:21:51
【问题描述】:

我对使用 ajax 传递值有疑问。我做过这样的事情:

 $('#zlozZamowienie').click(function () {
    var wycieczki = [];
    $("input[name=Id_wycieczki]:checked").each(function () {
        var id = $(this).attr('id');
        wycieczki.push(id);
    });


    var productModel = {

        Id_oferty: $("#Id_oferty").val(),
        Nazwa_oferty: $("#Nazwa_oferty").val(),
        Data_od: $("#Data_od").val(),
        Data_do: $("#Data_do").val(),
        Cena_za_miejsce: $("#Cena_za_miejsce").val(),
        iloscDni: $("#iloscDni").val(),
        SelectedKwaterunek: $("input:radio[name=SelectedKwaterunek]:checked").val(),
        IdWycieczek: wycieczki


    };

    $.ajax({
        type: "POST",
        url: '@Url.Action("Szczegoly", "Oferta")',
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ 'skomponowanaOferta': productModel}),

        dataType: "json",
        success: function () {
            alert('Success');
        },
        error: function (xhr) {
            alert(xhr.error);
        }

    });
    return false;




});

Szczegoly 控制器

  [HttpPost]
    public ActionResult Szczegoly(SzczegolyOfertyViewModel skomponowanaOferta)
    {

        if (ModelState.IsValid) { 
           ...
            };
            TempData["Szczegoly"] = szczegoly; 
            return RedirectToAction("ZlozZamowienie", "Zamowienia");
        }

Zamowienia 控制器

   public ActionResult ZlozZamowienie()
    {

        var skomponowanaOferta = (SzczegolyOfertyViewModel) TempData["Szczegoly"]; 
        SzczegolyOfertyViewModel podsumowanie = new SzczegolyOfertyViewModel();

        if (SprawdzWycieczki(skomponowanaOferta.IdWycieczek))
        {
           ...

           };

            return View(podsumowanie);
        }

正确传递数据但由于此返回错误语句,我的按钮不会将我重定向到任何地方。当我将此返回更改为 true 或仅删除它时,此 ajax 传递空值。我做错了什么?

编辑:我有来自 ajax 的错误,如下所示:

【问题讨论】:

  • click 操作的目标是什么,如果它是一个链接,它可能首先重定向,然后如果确实发生了 ajax,则 click 处理程序正在运行。
  • 点击动作的目标是HttpPost控制器,它通过RedirectToAction重定向到另一个控制器。我使用 TempData 在控制器之间传递这些数据。
  • 我猜,如果您使用的是 AJAX,则无法从后端重定向页面
  • 可能ajax调用成功返回后,可以location.href="url"
  • 我复制了我的控制器以使事情更清晰。

标签: c# json asp.net-mvc asp.net-ajax


【解决方案1】:

好的,我在这里找到了答案 RedirectToAction not working after successful jquery ajax post?

然后我将它添加到我的 ajax 中:

location.href="url"

就像@vinayakj 说的那样

【讨论】:

  • 为什么你不只是序列化你的表单 - data: $('form').serialize()` 并删除contentType 选项。但是,当你真正想要重定向时使用 ajax 只是简单的疯狂和毫无意义的额外开销。只需正常提交即可!
  • 简单,我只是想学习新事物。感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
相关资源
最近更新 更多