1

アイデアは、通常の外部 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 サイトの一部ではないため、ビューまたは部分ビューを使用できません。戻り値の型は何ですか?

4

1 に答える 1

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>
于 2011-12-28T04:58:41.990 に答える