2

我有一个联系表格的部分视图。

我的问题是,表单发布后,控制器重定向到部分视图的实际 URL:("LocalHost:/Views/ContactUs/MoreInformationRequest.cshtml")

我想保留相同的 URL 并只显示 ViewData["MsgSent"] 消息。

这是对局部视图的调用:

@Html.Partial("~/Views/ContactUs/MoreInformationRequest.cshtml")

风景:

   @using (Html.BeginForm( "MoreInformationRequest","ContactUs"))
    {
      .....

       <input type="submit" value="send" /><br />
       @ViewData["MsgSent"]

     }

控制器:

    [HttpPost]
    public ActionResult MoreInformationRequest(ContactUs contacts)
    {

      .....

        ViewData["MsgSent"] = "Message sent!"
        return View();

    }
4

3 回答 3

1

您可以使用重定向重新显示加载部分视图的页面:

return RedirectToAction("OriginalAction");

您还可以返回特定视图,尤其是原始操作中的视图:

return View("OriginalView");
于 2013-08-20T15:30:53.167 回答
1

使用 jQuery 发布到服务器并从 javascript 函数返回 false 以停止默认处理(即从控制器发送到新的 url。

于 2013-08-20T18:31:03.817 回答
0

一开始我提出了这个解决方案 - 使用以下方法重定向到同一页面:

Request.Redirect("~/");

但我不喜欢这个解决方案,所以我通过使用客户端代码将数据发送到控制器来解决这个问题:

    <script>
                    var request;
                    $('#formMoreInformationRequest').submit(function () {

                        var Name = document.getElementById('Name');
                        var Phone = document.getElementById('Phone');

                       // without this the validations in the page are not working.
                        if (Name.value == "") {                            
                            return false;}

                        else if (Phone.value == "") {                           
                            return false; }

                        else {

                            $('#overlay').show()


                            if (request) {
                                request.abort();
                            }

                            // setup some local variables
                            var $form = $(this);

                            // let's select and cache all the fields
                            var $inputs = $form.find("input, select, button, textarea");

                            // serialize the data in the form
                            var serializedData = $form.serialize();


                            // let's disable the inputs for the duration of the ajax request
                            $inputs.prop("disabled", true);


                            // fire off the request to /form.php
                            request = $.ajax({
                                url: "/ContactUs/MoreInformationRequest",
                                type: "post",
                                data: serializedData
                            });


                            // callback handler that will be called on success
                            request.done(function (response, textStatus, jqXHR) {
                                $('#overlay').hide()
                                $("#moreInfoMsg").html("Message Sent!");
                            });

                            // callback handler that will be called on failure
                            request.fail(function (jqXHR, textStatus, errorThrown) {
                                $('#overlay').hide()

                                // log the error to the console
                                alert(
                                    "The following error occured: " +
                                    textStatus, errorThrown
                                );
                            });

                            // callback handler that will be called regardless
                            // if the request failed or succeeded
                            request.always(function () {
                                // reenable the inputs
                                $inputs.prop("disabled", false);
                            });


                            // prevent default posting of form       
                            event.preventDefault();

                        }
</script>
于 2013-08-21T18:23:11.313 回答