MVC ActionResult应该为外部HTML ajaxForm帖子返回什么类型

时间:2011-05-11 21:13:50

标签: c# asp.net-mvc-2 jquery-plugins ajaxform

idee是将表单数据从普通的外部Html页面发布到另一个MVC站点控制器。然后几乎像使用Web服务一样处理数据。

$(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 :(得分:0)

您需要返回partialview结果:

    [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>