0

我的 asp.net mvc 4.0 Web 应用程序中有以下代码。这个视图是一个搜索视图,它有搜索字段和一个 Ajax.BeginForm 来调用搜索操作方法:-

@using (Ajax.BeginForm("AdvanceSearchIndex", "Home",
new AjaxOptions
{
    HttpMethod = "get",
    InsertionMode = InsertionMode.Replace,
    LoadingElementId = "progress",
    UpdateTargetId = "SearchTable"

}))
{


  <div>
    <span class="f">@Html.DisplayNameFor(model => model.ip) </span> 

    @Html.EditorFor(model => model.ip) @Html.DropDownListFor(a => a.ipselection, Model.NameSelectionOptions)
    @Html.ValidationMessageFor(model => model.ip)
</div>

        <div>
    <span class="f">@Html.DisplayNameFor(model => model.mac)  </span> 

    @Html.EditorFor(model => model.mac) @Html.DropDownListFor(a => a.macselection, Model.NameSelectionOptions)
    @Html.ValidationMessageFor(model => model.mac)
</div>

   <div>
    <span class="f">@Html.DisplayNameFor(model => model.AssetTypeID) </span>

   @Html.DropDownListFor(model => model.AssetTypeID, ((IEnumerable<TMS.Models.TechnologyType>)ViewBag.Techtypes).Select(option => new SelectListItem
{
    Text = (option == null ? "None" : option.Name),
    Value = option.AssetTypeID.ToString(),
    Selected = (Model != null) && (option.AssetTypeID == (int)ViewBag.AssetTypeID)
}), "All",new { @class = "SmallDropDown5" })
       @Html.ValidationMessageFor(model => model.AssetTypeID)
</div>
 <input class="btn btn-success" type="submit" value="Search" /> <span>&nbsp; &nbsp;</span>
    <input type="reset" value="Reset" class='btn' />
    <img src="~/Content/Ajax-loader-bar.gif" class="loadingimage" id="progress" />  

}

现在我想在“搜索”按钮旁边添加一个名为“导出到 CSV”的按钮,用户可以在其中单击“导出”按钮,这将调用另一个执行导出操作的操作方法。所以在导出操作方法中,我需要传递相同的搜索参数,因此导出数据将仅用于相关记录。所以我尝试将导出按钮定义为父按钮,将搜索定义为内部按钮。因此,当用户单击“导出”时,他们实际上会重新提交搜索字段,这是我更新的代码:-

@using (Ajax.BeginForm("Export", "Home",
new AjaxOptions
{
    HttpMethod = "get",
    InsertionMode = InsertionMode.Replace,
    LoadingElementId = "progress",
    UpdateTargetId = "SearchTable"

}))
{
using (Ajax.BeginForm("AdvanceSearchIndex", "Home",
new AjaxOptions
{
    HttpMethod = "get",
    InsertionMode = InsertionMode.Replace,
    LoadingElementId = "progress",
    UpdateTargetId = "SearchTable"

}))
{
 //code goes here 
 <input class="btn btn-success" type="submit" value="Search" /> 
    <input type="reset" value="Reset" class='btn' />
    <img src="~/Content/Ajax-loader-bar.gif" class="loadingimage" id="progress" />  

}
 <input class="btn btn-success" type="submit" value="Export" /> 
 }

但是当我点击导出按钮时,什么都不会发生......当我点击搜索时,将调用导出肌动蛋白方法......那么有没有办法嵌套 Ajax.Beginform?

4

1 回答 1

0

HTML 5 中不允许嵌套表单(请参阅https://stackoverflow.com/a/26536925/3111689)。

我建议为您的过滤器提供某种 id(例如 id="filter_ip"),然后在您的按钮上运行以下 JavaScript:

window.location = '/Export?ip=document.getElementById("filter_ip")&mac=...';

如果有更多参数的长度会超过获取请求的限制,您可以通过 JavaScript/Ajax 进行发布。

于 2017-11-10T13:41:10.613 回答