来自javascript的带有发布数据的新Razor页面
如何使用javascript发布数据,然后加载新的Razor页面 如果我从Ajax调用中调用一个新的Razor页面,那么我就不能返回该新页面 我怎样才能做到这一点 多谢各位 客户端:Razor Page1.cshtml上的Javascript 变量ptFilter=(…); //美元。阿贾克斯???Page2的callpost方法 服务器:另一个razor页面Page2.cs 公共异步任务OnPostSendAsync([FromBody]PtFilter-PtFilter) {来自javascript的带有发布数据的新Razor页面,javascript,c#,razor-pages,Javascript,C#,Razor Pages,如何使用javascript发布数据,然后加载新的Razor页面 如果我从Ajax调用中调用一个新的Razor页面,那么我就不能返回该新页面 我怎样才能做到这一点 多谢各位 客户端:Razor Page1.cshtml上的Javascript 变量ptFilter=(…); //美元。阿贾克斯???Page2的callpost方法 服务器:另一个razor页面Page2.cs 公共异步任务OnPostSendAsync([FromBody]PtFilter-PtFilter) { }您可以通过$
}您可以通过$.ajax发布数据并接收控制器的响应,然后只需使用
window.location.replace(此处是您的page2操作url)
诸如此类:
$.ajax({
url: "...",
//...
}).done(function(data) {
//If needed, check received data, then
window.location.replace(your page2 action url here);
});
请记下$ajax.url和包含updatePreviewCart()的@ajax.success() 在我一直在开发的razor pages应用程序的下面示例中,我正在将产品页面中的一个产品项添加到网站导航菜单上的购物车视图组件中。将项目添加到购物车数据库后,第一个代码段中ajax调用的返回成功块将更新导航栏上的购物车。ViewComponent通过BaseController加载,因为组件正在_Layout.cs文件中使用 Products.html
$(".add-to-cart").on("click", function (element: any) {
element.preventDefault();
$.ajax({
cache: false,
type: "POST",
url: "Products/?handler=AsyncAddToCart",
data: { id: $(this).data("id") },
beforeSend: xhr => {
xhr.setRequestHeader("XSRF-TOKEN", ($('input:hidden[name="__RequestVerificationToken"]').val() as string));
},
success: (data) => {
if (data.isSuccess) {
toastr.success($(this).data("name") + " has successfully been added to your cart. <a href='/Index'>Go to checkout</a>");
updatePreviewCart();
} else {
toastr.error(data.message);
}
},
error: (xhr: any, ajaxOptions: any, thrownError: any) => {
toastr.error("Unable to add items at this time. Please try again later or contact support if issue persists.");
}
});
});
BaseController.cs
[Route("[controller]/[action]")]
public class BaseController : Controller
{
[HttpGet]
public IActionResult GetCartViewComponent()
{
return ViewComponent("Cart");
}
[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1)}
);
return LocalRedirect(returnUrl);
}
}
Cart.cs视图组件
public class Cart : ViewComponent
{
private readonly ICartService _cartService;
public Cart(ICartService cartService)
{
_cartService = cartService;
}
public async Task<IViewComponentResult> InvokeAsync()
{
return View("~/Pages/Components/Cart/Default.cshtml", await _cartService.GetCart());
}
}
公共类购物车:ViewComponent
{
专用只读ICartService\u cartService;
公共购物车(ICartService cartService)
{
_cartService=cartService;
}
公共异步任务InvokeAsync()
{
返回视图(“~/Pages/Components/Cart/Default.cshtml”,wait_cartService.GetCart());
}
}
为什么不能用Javascript重定向到下一页?我使用razor pages核心。我没有控制器。我有一个像控制器一样的页面模型。页面模型从数据库获取数据,并将包含数据的页面返回给客户端(就像控制器一样)。。如果我使用window.location.replace从ajax调用页面,我如何传递数据?@Enis,您会问:“我如何使用javascript发布数据,然后再加载新的Razor页面?”。现在你又问了一个新问题。下次请简洁一点。然而,对于新问题,您可以传递查询参数。
[Route("[controller]/[action]")]
public class BaseController : Controller
{
[HttpGet]
public IActionResult GetCartViewComponent()
{
return ViewComponent("Cart");
}
[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1)}
);
return LocalRedirect(returnUrl);
}
}
public class Cart : ViewComponent
{
private readonly ICartService _cartService;
public Cart(ICartService cartService)
{
_cartService = cartService;
}
public async Task<IViewComponentResult> InvokeAsync()
{
return View("~/Pages/Components/Cart/Default.cshtml", await _cartService.GetCart());
}
}