jQueryAjax从视图调用控制器方法,但不显示在mvc中返回该方法的视图
我已经从Index.cshtml视图向主列表控制器中的PrintPreview方法发出了Ajax调用,并且还传递了参数。索引方法也存在于主列表控制器中,但当从PrintPreview返回视图时,方法调用将转到PrintPreview.cshtml页面,但该页面未加载,即未在浏览器中显示,而Index.cshtml页面在浏览器中显示,请帮助jQueryAjax从视图调用控制器方法,但不显示在mvc中返回该方法的视图,jquery,ajax,asp.net-mvc-4,Jquery,Ajax,Asp.net Mvc 4,我已经从Index.cshtml视图向主列表控制器中的PrintPreview方法发出了Ajax调用,并且还传递了参数。索引方法也存在于主列表控制器中,但当从PrintPreview返回视图时,方法调用将转到PrintPreview.cshtml页面,但该页面未加载,即未在浏览器中显示,而Index.cshtml页面在浏览器中显示,请帮助 $('#printbtn').click(function () { $.ajax({ type: 'POST', u
$('#printbtn').click(function () {
$.ajax({
type: 'POST',
url: '@Url.Action("PrintPreview", "MasterList")',
data:
{ saleorderIdList: JSON.stringify(saleorder_id),
orderIdList:JSON.stringify(order_id) },
});
});
public ActionResult PrintPreview(string saleorderIdList, string orderIdList)
{
var locationIdOfLoginUser = Convert.ToInt32(Session["LocationId"]);
ViewBag.loccationName = Session["LocationName"];
ViewBag.locationType = Session["LocationType"];
JavaScriptSerializer serializer = new JavaScriptSerializer();
IEnumerable<int> saleOrderIds = new int[] { };
IEnumerable<int> orderIds = new int[] { };
if (saleorderIdList != null)
{
saleOrderIds = serializer.Deserialize<IEnumerable<int>>(saleorderIdList);
}
if (orderIdList != null)
{
orderIds = serializer.Deserialize<IEnumerable<int>>(orderIdList);
}
MasterListService masterListService = new MasterListService();
var ordercollection = masterListService.GetSelectedorders(locationIdOfLoginUser, saleOrderIds, orderIds);
return View(ordercollection);
}
$('#printbtn')。单击(函数(){
$.ajax({
键入:“POST”,
url:'@url.Action(“打印预览”、“主列表”),
数据:
{saleorderIdList:JSON.stringify(saleorder_id),
orderIdList:JSON.stringify(order_id)},
});
});
public ActionResult打印预览(字符串saleorderIdList,字符串orderIdList)
{
var locationIdOfLoginUser=Convert.ToInt32(会话[“LocationId”]);
ViewBag.LocationName=会话[“LocationName”];
ViewBag.locationType=会话[“locationType”];
JavaScriptSerializer serializer=新的JavaScriptSerializer();
IEnumerable saleOrderId=new int[]{};
IEnumerable orderId=newint[]{};
if(saleorderIdList!=null)
{
SaleOrderId=serializer.Deserialize(saleorderIdList);
}
if(orderIdList!=null)
{
OrderID=序列化程序。反序列化(orderIdList);
}
MasterListService MasterListService=新的MasterListService();
var ordercollection=masterListService.GetSelectedorders(locationIdOfLoginUser、SaleOrderId、OrderId);
返回视图(ordercollection);
}
在上面的代码中,我得到了数组saleorderid和orderid
同样在ordercollection中,我得到了预期的列表以供查看
调用也将转到PrintPreview视图在该视图中,我得到了传递到该视图的所有列表,但PrintPreview.cshtml页面没有显示,而是显示Index.cshtml页面从ajax调用传递的位置显示。如果您想重定向,请使用form submit而不是ajax调用,您的ajax调用将永远不会重定向
2) 或者,如果您仍然希望通过ajax调用实现,请使用局部视图重新加载ajax返回数据。然后您必须使用return PartialView(ordercollection)
正如这里所解释的,您所做的是调用函数,而不使用返回值执行任何操作。以下是Ajax调用的外观:
$('#printbtn').click(function () {
$.ajax({
type: 'POST',
url: '@Url.Action("PrintPreview", "MasterList")',
data:
{ saleorderIdList: JSON.stringify(saleorder_id),
orderIdList:JSON.stringify(order_id) },
onSuccess: function(response) {
// THIS IS WHERE YOU DISPLAY THE RETURN CSHTML SOMEWHERE. response RETURN VALUE IS NOTHING BUTH THE WHOLE CSHTML
//you may do something like
$('#mydiv').html(response);
}
});
});
假设您的url和后端代码工作正常,这将正常工作。Ajax调用保持在同一页面上。如果要呈现由
PrintPreview
返回的视图,则它需要是returnpartialview(ordercollection)在ajaxsuccess:
回调中,更新DOM。如果这不是你想要的,做一个普通的提交/发布到一个方法并重定向。你能建议代码示例你想要做什么?保持在同一页或重定向到另一个视图?但我必须将两个数组列表传递给该方法您可以实现这一点,借助Ajax+局部视图概念,查看Answer中提供的链接,但是如果我使用form submit,如何将两个数组列表传递给该方法在脚本jquery中,我获得了两个数组,那么该数组如何才能单击打印按钮的事件