ASP.NET MVC多种形式,保持同一页面

时间:2011-03-21 19:42:10

标签: asp.net-mvc partial-views

我的表单位于布局页面的多个区域(非嵌套)。

我有一个局部视图执行控制器操作的帖子。

我在该帖子中返回哪些操作结果以使用户保持在当前页面上?

jquery / ajax是我的唯一选择吗?我宁愿一个不依赖于javascript的解决方案,甚至可能是一个降级很好的解决方案。

3 个答案:

答案 0 :(得分:1)

您只需要将RedirectToAction(“”)恢复到主视图。

答案 1 :(得分:1)

您可以使用Request.Referrer属性查看用户来自哪个页面,然后使用该页面将其重定向回来。

这确实引入了其他问题,例如失去ModelState,所以你必须为此设计。另请注意,某些用户可以阻止在其请求中向服务器发送引用者信息 - 因此Referrer属性可以为空。

我建议使用AJAX,然后再使用它。

答案 2 :(得分:1)

要发布表单而不提交刷新浏览器的整个页面,您需要使用Ajax / jQuery。降级的解决方案是像普通表单一样提交整个页面。

以下是我使用jQuery的方法。

HTML:

<div id="RequestButtonDiv">
    <button id="RequestButton" name="Request" type="button">Request</button> 
</div>

单击RequestButton按钮时,会在我的Request控制器上调用AddToCart。响应放在RequestButtonDiv元素中。

<script type="text/javascript">
            $(document).ready(function () {
                $('#RequestButton').click(function (event) {
                    $('#RequestButton').text('Processing...');
                    $('#RequestButton').attr('disabled', true);
                    submitRequest();
                });
            });

            function submitRequest() {
                $.ajax({
                    url: '<%: Url.Action("AddToCart", "Request", new { id = Model.RowId,  randomId = new Random().Next(1, 999999) }  ) %>',
                    success: function (response) {
                        // update status element
                        $('#RequestButtonDiv').html(response);
                    }
                });
            }           
 </script> 

控制器操作:

    public ActionResult AddToCart(int id)
    {
        var user = AccountController.GetUserFromSession();
        user.RequestCart.AddAsset(id);

        return View("~/Views/Assets/Details_AddToCart.ascx"); 
    }

控制器返回局部视图。您也可以返回内容(“一些东西”)。

如果您有疑问或需要更多详细信息,请使用Holler。