Каким должен быть возвращаемый тип MVC ActionResult для внешнего HTML-сообщения ajaxForm - PullRequest
1 голос
/ 12 мая 2011

Идея заключается в публикации данных формы с обычной внешней HTML-страницы на другом контроллере сайта MVC.Затем данные обрабатываются почти как с помощью веб-службы.

$(document).ready(function () {
  var options = {
    target: '#output',
    success: function(data){ alert('test success'); },
    url: http://localhost:57232/Services/SendFormData,
    dataType:  json
  };

  $('form').ajaxForm(options);
});

ActionResult правильно получает данные в объекте FormCollection.

[HttpPost]
public ActionResult SendFormData(FormCollection collection)
{
  string s = string.Empty;

  return Json(new { Success = true, Message = "Message!" }, JsonRequestBehavior.AllowGet);
}

В этот момент возвращается результат успеха, но когдаон попадает во внешнюю форму моего браузера, которая в этом случае IE пытается сохранить или открыть возвращенные байты вместо вызова функции обратного вызова.

Поскольку эта страница является внешней страницей, а не частью MVCсайте я не могу использовать просмотр или частичный просмотр.Каким должен быть тип возвращаемого значения?

1 Ответ

0 голосов
/ 28 декабря 2011

Вам необходимо вернуть результат частичного просмотра:

    [HttpPost]
    public ActionResult Form(Comment feedback)
    {
        if (feedback != null)
        {
            feedback.CommentedOn = DateTime.Now;
            feedback.CommentId += 1;
            if (ModelState.IsValid)
            {
                BlogPost blogpost = db.BlogPosts.Find(feedback.BlogId);
                if (blogpost != null)
                    blogpost.NoofComments += 1;
                db.Entry(blogpost).State = EntityState.Modified;
                db.Entry(feedback).State = EntityState.Modified;
                db.Comments.Add(feedback);
                db.SaveChanges();
                return PartialView("CommentSuccess", feedback);
            }
        }
        return PartialView("Comment", feedback);
    }

Также в AjaxForm вам нужно установить UpdateTargetID:

@using (Ajax.BeginForm("Form", new AjaxOptions() { UpdateTargetId = "FormContainerdiv"     , OnSuccess = "$.validator.unobtrusive.parse('form');", OnComplete = "OnComplete();" }))

в targetId формы Ajax, которую вы должны упомянутьDiv ID, где вы должны отобразить данные ответа.

<div id="FormContainerdiv">.</div>
@Html.Partial("Comment", item);
</div>
...