我的表单位于布局页面的多个区域(非嵌套)。
我有一个局部视图执行控制器操作的帖子。
我在该帖子中返回哪些操作结果以使用户保持在当前页面上?
jquery / ajax是我的唯一选择吗?我宁愿一个不依赖于javascript的解决方案,甚至可能是一个降级很好的解决方案。
答案 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。