从部分视图发布更改URL

时间:2013-08-20 15:17:59

标签: asp.net-mvc

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

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

我想保留相同的网址,只显示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();

    }

3 个答案:

答案 0 :(得分:1)

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

return RedirectToAction("OriginalAction");

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

return View("OriginalView");

答案 1 :(得分:1)

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

答案 2 :(得分: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>