0

アヤックス練習中!私は簡単な連絡先フォームを持っており、これが私の行動です:

public ActionResult Contact()
        {
            return View("Contact");
        }

        [HttpPost]
        public ActionResult Contact(ContactViewModel contactViewModel)
        {
            if (ModelState.IsValid)
            {
                var contact = contactViewModel.ConvertToContactModel(); 
                _contactRepository.Add(contact);
                _contactRepository.Save();
                return Json(new { msg = "Your contact Sent, I'll response soon." });
            }
            return Json("Sorry! Somthing went wrong, try again or contact again");
        }

これは私のビューです:

@model Blog.Web.UI.ViewModels.ContactViewModel 
@{
    ViewBag.Title = "Contact";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div id="Contact">
    @using (Ajax.BeginForm("Contact", "Home", new AjaxOptions() { OnSuccess = "Success" }))
    {

        <div>
            @Html.LabelFor(c => c.Name)
            @Html.TextBoxFor(c => c.Name)
        </div>

        <div>
            @Html.LabelFor(c => c.Email)
            @Html.TextBoxFor(c => c.Email)
            @Html.ValidationMessageFor(c => c.Email)
        </div>

        <div>
            @Html.LabelFor(c => c.Subject)
            @Html.TextBoxFor(c => c.Subject)
        </div>

        <div>
            @Html.LabelFor(c => c.Body)
            @Html.TextAreaFor(c => c.Body)
            @Html.ValidationMessageFor(c => c.Body)
        </div>
        <input type="submit" value="Send" />
    }
</div>

<script type="text/javascript">
    function Success(context) {
        if (context[0]) {
            $("#Contact").empty().html(context[1]);
        }
    }
</script>

ここで、ユーザーに接続の成功または失敗を表示したいのですが、動作しないコードの問題は何ですか?? この場合、私の検証が機能しないのは非常に興味深いことです。これについて私を助けてください、ありがとう

4

2 に答える 2

1

エラー応答を送信する場合は、Response オブジェクトの ResponseCode を適切な http エラー コード (不正な要求の場合は 400 など) に設定する必要があります。

次に、必要なコンテンツを表示するために ajax.beginform でエラー ハンドラーを提供する必要があります。そうしないと、応答コード 200 が返されます。これは、すべてがハンキー ドリーであると見なされるため、エラー ハンドラーはトリガーされません。

于 2013-04-08T13:53:49.723 に答える
0

Slicksim とは対照的に、通常、ブール変数 Success を含むアプリケーション モデルで定義された JSON 戻りクラスがあります。次に、これを使用して、リクエストが成功したかどうかを Javascript に判断させることができます。

public class JsonResponseModel(){
   public bool Success {get;set;}

   public string Message {get;set;}
}

public ActionResult Contact()
        {
            return View("Contact");
        }

        [HttpPost]
        public ActionResult Contact(ContactViewModel contactViewModel)
        {
            if (ModelState.IsValid)
            {
                var contact = contactViewModel.ConvertToContactModel(); 
                _contactRepository.Add(contact);
                _contactRepository.Save();
                return Json(new JsonResponseModel{ Success = true, Messsage = "Your contact Sent, I'll response soon." });
            }
            return Json(new JsonResponseModel{Success = false, Message = "Sorry! Somthing went wrong, try again or contact again"});
        }

<script type="text/javascript">
    function Success(response) {
        if (response.Success) {
            $("#Contact").empty().html(response.Message);
        }
        else{
           alert(response.Message);
        }
    }
</script>

これは、実際のサーバー エラー (HTTP ステータス コード 500/404/etc) ではなく、AJAX 呼び出しで検証が失敗した場合に別のことをしたい場合があるため、サーバー ヘッダーを変更する代わりに行ったルートだと思います。

于 2013-04-08T13:59:15.257 に答える