1

想法是将表单数据从普通的外部 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 站点的一部分,所以我不能使用视图或部分视图。返回类型应该是什么?

4

1 回答 1

0

您需要返回部分视图结果:

    [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();" }))

在 Ajax 表单的 targetId 中,您需要提及必须在其中显示响应数据的 div id。

<div id="FormContainerdiv">.</div>
@Html.Partial("Comment", item);
</div>
于 2011-12-28T04:58:41.990 回答