有没有办法在我的aps.net MVC中定义内部Ajax.BeginForm

时间:2017-11-10 13:06:09

标签: asp.net ajax asp.net-mvc ajax.beginform ajaxhelper

我的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" />  

}

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

@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" /> 
 }

但是当我点击导出按钮时,什么都不会发生......当我点击搜索导出时,会调用actin方法..所以有没有办法嵌套Ajax.Beginform ??

1 个答案:

答案 0 :(得分:0)

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

我建议您为过滤器添加某种ID(例如id =&#34; filter_ip&#34;),然后在按钮上运行以下JavaScript:

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

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