对于外部 HTML ajaxForm 帖子,MVC ActionResult 返回类型应该是什么

发布于 2024-11-07 07:28:36 字数 737 浏览 0 评论 0原文

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

The idee is to post form data from a normal external Html page to another MVC site controller. Then the data is processed almost like using a webservice.

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

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

The ActionResult receives the data correctly in the FormCollection object.

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

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

At this point the success result is returned but when it gets to the external form my browser which is in this case IE tries to save or open the bytes returned instead of calling the success callback function.

Because this page is an external page, and not part of the MVC site I cannot use a View or Partial View. What should the return type be?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不交电费瞎发啥光 2024-11-14 07:28:36

您需要返回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>

You need to return partialview result :

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

Also in the AjaxForm you need to set the UpdateTargetID:

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

in the targetId of the Ajax Form you need to mention the div id where you have to display the response data.

<div id="FormContainerdiv">.</div>
@Html.Partial("Comment", item);
</div>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文