Есть ли способ определить внутренний Ajax.BeginForm внутри моего aps.net MVC

У меня есть следующий код в моем веб-приложении asp.net mvc 4.0. это представление поиска, которое имеет поля поиска и 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??

1 ответ

Вложенные формы не допускаются в HTML 5 (см. /questions/28023955/vernyi-li-vlozhennyie-formyi-v-html5/28023959#28023959).

Я хотел бы предложить вашим фильтрам какой-то идентификатор (например, id="filter_ip"), а затем запустить следующий JavaScript на вашей кнопке:

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

Если есть больше параметров, длина которых превышает лимит запроса get, вы можете сделать сообщение через JavaScript/Ajax.

Другие вопросы по тегам