MVC3 Ajax.begin后期下载文件

MVC3 Ajax.begin后期下载文件,ajax,asp.net-mvc-3,download,Ajax,Asp.net Mvc 3,Download,基本上,我的表单将ajax响应发送到div,div持有部分视图,但我有另一个提交按钮,它使用相同的数据生成csv文件。我无法下载此文件,只是将其输出到div中。有人可以帮助或指导正确的方向吗。。我尝试过actionlinks,但它永远不会将我的模型持久化到数据库中,因为我无法设置目标div来加载部分视图,所以我不能使用html.beginfounds 更新:使用脚本但仍不工作 data.DrawingEfficiencyWeeklyData = New DrawingEffici

基本上,我的表单将ajax响应发送到div,div持有部分视图,但我有另一个提交按钮,它使用相同的数据生成csv文件。我无法下载此文件,只是将其输出到div中。有人可以帮助或指导正确的方向吗。。我尝试过actionlinks,但它永远不会将我的模型持久化到数据库中,因为我无法设置目标div来加载部分视图,所以我不能使用html.beginfounds

更新:使用脚本但仍不工作

        data.DrawingEfficiencyWeeklyData = New DrawingEfficiencyWeeklyData
        data.DrawingEfficiencyPeriodData = New DrawingEfficiencyPeriodData
        data.DrawingEfficiencyYearlyData = New DrawingEfficiencyYearlyData
        data.DrawingEfficiencyYearlyMeanData = New DrawingEfficiencyYearlyMeanData
        data.DrawingEfficiencySummaryData = New DrawingEfficiencySummaryData
        data.ToleranceOverrideReportData = New ToleranceOverrideReportData
        data.TareDetailReportData = New TareDetailReportData

        Dim var = db.GetGLCYears
        Dim var2 = db.GetGLCYears
        Dim var3 = db.GetGLCYears
        Dim var4 = db.GetGLCYears

        Dim allList As New SelectListItem With {.Value = 0, .Text = "All"}
        Dim BonusList As New SelectListItem With {.Value = 1, .Text = "Bonus"}
        Dim OtherList As New SelectListItem With {.Value = 2, .Text = "Other"}

        Dim categoryList As New List(Of SelectListItem)
        categoryList.Add(allList)
        categoryList.Add(BonusList)
        categoryList.Add(OtherList)

        data.DrawingEfficiencyYearlyMeanData.CategoryList = categoryList
        data.DrawingEfficiencyYearlyMeanData.YearList = var4.Select(Function(i) New SelectListItem With {.Value = i.Y, .Text = i.Y})
        data.DrawingEfficiencyWeeklyData.YearList = var.Select(Function(i) New SelectListItem With {.Value = i.Y, .Text = i.Y})
        data.DrawingEfficiencyPeriodData.YearList = var2.Select(Function(i) New SelectListItem With {.Value = i.Y, .Text = i.Y})
        data.DrawingEfficiencyYearlyData.YearList = var3.Select(Function(i) New SelectListItem With {.Value = i.Y, .Text = i.Y})

        Select Case btnSearch

            Case Is = "Search"
                Return (SearchProductionReport(data))
            Case Is = "Export Data"
                Return ExportProductionReportData(data)
            Case Else
                Return View(data)
        End Select

        Return View(data)
    End Function

$(文档).ready(函数(){
$(“#productionsearch”)。单击(函数(){
$(“#productionform”).submit(函数(){
$.ajax({
url:this.action,
类型:this.action,
数据:$(this).serialize(),
成功:功能(结果){
$(“#searchresultdata”).html(结果);
}
});
});
});
});

`

您不能使用AJAX下载文件。只需使用普通的
Html.BeginForm

就可以下载文件。只需使用普通的
Html.BeginForm


 <script type="text/javascript">
$(document).ready(function () {
    $("#productionsearch").click(function () {
        $("#productionform").submit(function () {
            $.ajax({
                url: this.action,
                type: this.action,
                data: $(this).serialize(),
                success: function (result) {
                $("#searchresultdata").html(result);
                }
            });
        });
    });
});
$(文档).ready(函数(){ $(“#ProductionSearch”)。单击(函数(){ 警报(“点击按钮”); var$form=$(“#ProductionSearch”)。父项('form') $.ajax({ 类型:“POST”, url:“@url.Action”(“SearchProductionReport”)”, 数据:$form.serialize(), 错误:函数(xhr、状态、错误){ 警报(“发生错误”+错误) }, 成功:功能(响应){ 警报(“功能正常”); $(“#searchresultdata”).html(响应); } }); }); });

回答。我想出来了。使用HTML.BeginForm(“YourDownloadAction”、“YourController”、“表单id”) 然后创建两个按钮,一个类型为submit,另一个类型为button。确保javascript正在调用不需要下载文件的操作。就这样。现在您必须实现验证,因为它不会通过jquery在ajax调用上实现。。。谢谢,达林,至少你给我指明了正确的方向

已更新以进行验证

<script type="text/javascript">
$(document).ready(function () {
    $("#ProductionSearch").click(function () {
        alert("Button Clicked");
        var $form = $("#ProductionSearch").parents('form')
        $.ajax({
            type: "POST",
            url: "@URL.Action("SearchProductionReport")",
            data: $form.serialize(),
            error: function (xhr, status, error) {
                alert("an error occurred" + error)
            },
            success: function (response) {
                alert("Function worked");
                $("#searchresultdata").html(response);
            }
        });
    });
});

$(文档).ready(函数(){
$(“#ProductionSearch”)。单击(函数(){
var$form=$(“#ProductionSearch”)。父项('form')
if($($form).validate().form()==true){
$.ajax({
类型:“POST”,
url:@url.Action(“SearchProductionReport”,“Reports”,Nothing)”,
数据:$form.serialize(),
错误:函数(xhr、状态、错误){
$(“对话框”)。对话框(“打开”);
$(“#dialog”).html(“请注意,搜索生产数据时出现错误,请重试或与管理员联系”

“+”
“+错误+”
”; }, 成功:功能(响应){ $(“#searchresultdata”).html(响应); } }); } }); });


$(文档).ready(函数(){
$(“#ProductionSearch”)。单击(函数(){
警报(“点击按钮”);
var$form=$(“#ProductionSearch”)。父项('form')
$.ajax({
类型:“POST”,
url:“@url.Action”(“SearchProductionReport”)”,
数据:$form.serialize(),
错误:函数(xhr、状态、错误){
警报(“发生错误”+错误)
},
成功:功能(响应){
警报(“功能正常”);
$(“#searchresultdata”).html(响应);
}
});
});
});

回答。我想出来了。使用HTML.BeginForm(“YourDownloadAction”、“YourController”、“表单id”) 然后创建两个按钮,一个类型为submit,另一个类型为button。确保javascript正在调用不需要下载文件的操作。就这样。现在您必须实现验证,因为它不会通过jquery在ajax调用上实现。。。谢谢,达林,至少你给我指明了正确的方向

已更新以进行验证

<script type="text/javascript">
$(document).ready(function () {
    $("#ProductionSearch").click(function () {
        alert("Button Clicked");
        var $form = $("#ProductionSearch").parents('form')
        $.ajax({
            type: "POST",
            url: "@URL.Action("SearchProductionReport")",
            data: $form.serialize(),
            error: function (xhr, status, error) {
                alert("an error occurred" + error)
            },
            success: function (response) {
                alert("Function worked");
                $("#searchresultdata").html(response);
            }
        });
    });
});

$(文档).ready(函数(){
$(“#ProductionSearch”)。单击(函数(){
var$form=$(“#ProductionSearch”)。父项('form')
if($($form).validate().form()==true){
$.ajax({
类型:“POST”,
url:@url.Action(“SearchProductionReport”,“Reports”,Nothing)”,
数据:$form.serialize(),
错误:函数(xhr、状态、错误){
$(“对话框”)。对话框(“打开”);
$(“#dialog”).html(“请注意,搜索生产数据时出现错误,请重试或与管理员联系”

“+”
“+错误+”
”; }, 成功:功能(响应){ $(“#searchresultdata”).html(响应); } }); } }); });

因此,当我需要显示局部视图时,如何更新results div。我有两个按钮,一个运行查询并返回渲染成div的部分视图,另一个允许您以csv格式下载文件。是否有其他方法可以使用Ajax的ajaxoptions中的HTML.BeginForm示例获得相同的功能。开始表单您有一个updatetargetid是否可以使用HTML.BeginForm实现此功能下载文件时,将提示用户将文件保存在其计算机上。视图不会刷新。我想我可能没有正确解释这一点。我需要表单中的值来生成视图或下载。我不想仅仅为了显示视图而转到新页面。它用结果填充表单下面的一个div。我只是希望能够在div中填充视图,并获取表单数据并创建csv下载文件。这在aspx时代非常简单。但是我不能用mvc3解决这个问题…你会
<script type="text/javascript">
$(document).ready(function () {
    $("#ProductionSearch").click(function () {
      var $form = $("#ProductionSearch").parents('form')
      if ($($form).validate().form() == true) {
       $.ajax({
            type: "POST",
            url: "@Url.Action("SearchProductionReport", "Reports", Nothing)",
            data: $form.serialize(),
            error: function (xhr, status, error) {
              $("#dialog").dialog("open");
              $("#dialog").html("<p>Please be advised that an error has occured while searching production data please try again or contact your administrator</p> " +"<br>" + error + "</br>");
            },
            success: function (response) {
                $("#searchresultdata").html(response);
            }
        });
      }
    });
});