2017-11-10 5 views
0

zu definieren Ich habe den folgenden Code in meiner asp.net mvc 4.0 Webanwendung. Diese Ansicht ist eine Suche, die Suchfelder haben und eine Ajax.BeginForm die Suchaktion Methode aufzurufen: -Gibt es eine Möglichkeit, innere Ajax.BeginForm in meinem aps.net MVC

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

} 

jetzt möchte ich eine Schaltfläche „Exportieren nach CSV“ neben dem „Suchen“ genannt hinzufügen Klicken Sie auf die Schaltfläche Exportieren, um eine andere Aktionsmethode aufzurufen, die den Exportvorgang ausführt. Also muss ich innerhalb der Exportaktionsmethode dieselben Suchparameter übergeben, sodass die Exportdaten nur für die zugehörigen Datensätze gelten. Also habe ich versucht, den Export-Button als Elternteil und die Suche als inneren Button zu definieren. so, wenn Benutzer auf dem Export klicken, werden sie erneut einreichen tatsächlich die Suchfelder, hier ist meine aktualisierte Code: -

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

, aber wenn ich auf die Schaltfläche Exportieren nichts clcik wird ... und wenn ich auf der Suche die Export-Actin-Methode wird aufgerufen .. so gibt es eine Möglichkeit, verschachtelte Ajax.Beginform ??

+0

Nein, verschachtelte Formulare sind ungültige HTML und werden nicht unterstützt. Löschen Sie einfach die veralteten 'Ajax.BeginForm()' Methoden und verwenden Sie '$ .ajax()' Methoden, die Ihnen viel mehr Flexibilität geben. –

Antwort

0

Verschachtelte Formulare sind in HTML 5 nicht erlaubt (siehe https://stackoverflow.com/a/26536925/3111689).

Ich würde vorschlagen, die Filter eine Art von ID (zB id = „filter_ip“) zu geben und dann den folgenden JavaScript auf Ihrem Schaltfläche ausführen:

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

Wenn es mehr Parameter, die Länge der überschreiten würde Limit einer Get-Anfrage, können Sie einen Beitrag über JavaScript/Ajax machen.

+0

aber in meinem Fall werde ich nicht in der Lage sein, die URL mit Suchparametern zu ändern .. wie ich ajax based sende .. –

+0

in dem Beispiel, das ich zur Verfügung gestellt hast, wirst du kein submit. Sie leiten den Client mit den Parametern, die Sie aus der GUI gelesen haben, zu Ihrer Exportaktion um. Wenn der Browser eine Datei als Antwort erhält, sieht der Benutzer keine Änderungen auf der Website und wird aufgefordert, das generierte CSV herunterzuladen. – Stofa

Verwandte Themen