1

jquery ajax を使用してコントローラー アクションを呼び出します (以下のコードを参照)。アクションが実行された後、無効な Json エラーが発生しました。そして、ページのコンテンツが返されることに気付きました。なぜそれが起こったのですか。誰でもこの問題を解決するのを手伝ってもらえますか?

コントローラ

[HttpGet]
       public ActionResult ViewDetails(int id)
       {
           var eventsdetails = _service.GeteventByID(id);
           return View("EventDetails",eventsdetails);
       }


       [HttpPost]
       public ActionResult UpdateAnswers(string answers, string question, string controlid, int eventid)
       {
           var replacetext=string.Empty;
           if (answers.Length>0) 
             replacetext = answers.Replace("\n", ",");
           _service.UpdateAnswers(eventid, replacetext, controlid);
          return RedirectToAction("ViewDetails", new { id = eventid });
       }

Javascript

function dropdownlist(controlid, title, answers, eventid) {
            var $answersreplaced = answers.replace( /\,/g , " \r");
            var $deleteDialog = $('<div><textarea id="answerlist"  rows="10" cols="50">' + $answersreplaced + '</textarea><div><div style="font-size:9px">(To change back to an open answer field, delete all choices above and save)</div>');
            $deleteDialog.dialog({
                resizable: false,
                height: 280,
                width: 350,
                title: title + " - Edit Choices",
                modal: true,
                buttons: {
                    "Save": function () {
                        $.ajax({
                            type: 'POST',
                            url: '@Url.Action("UpdateAnswers")',
                            dataType: 'json',
                            data: { answers: $('#answerlist').val(),
                                question: title,
                                controlid: controlid,
                                eventid: eventid
                            },
                            success: function (result) {
                                $(this).dialog("close");
                                alert(result);
                            },
                            error: function (xhr, ajaxOptions, thrownError) {
                                alert(thrownError);
                                // alert('there was a problem saving the new answers, please try again');
                            }
                        });
                    },
                    Cancel: function () {
                        $(this).dialog("close");
                    }
                }
            });
        };
4

2 に答える 2

1

これは、アクションから JsonResult を返していないためです。別のアクションにリダイレクトしているため、ViewResult が返されます。

次のようなことを試してください:

[HttpPost]
public ActionResult UpdateAnswers(string answers, string question, string controlid, int eventid)
{
    var replacetext=string.Empty;
    if (answers.Length>0) 
        replacetext = answers.Replace("\n", ",");
    _service.UpdateAnswers(eventid, replacetext, controlid);
    var eventsdetails = _service.GeteventByID(eventid);
    return Json(eventdetails);
}
于 2012-05-23T11:42:14.550 に答える
0

AJAXリクエストとコントローラーアクションdataType: 'json'内で指定すると、明らかにViewDetailsアクションにリダイレクトされ、ViewDetailsアクションはHTMLであるビューを返します。したがって、これは意味がありません。UpdateAnswersreturn RedirectToAction

リダイレクトする代わりに、UpdateAnswers コントローラー アクションから Json を返す必要があります。

于 2012-05-23T11:43:37.403 に答える