2017-11-10 2 views
0

다음 asp.net mvc 4.0 웹 응용 프로그램 내에 다음 코드가 있습니다. 이보기는 검색 필드가 검색보기 및 검색 액션 메소드를 호출하는 Ajax.BeginForm입니다 : -내 aps.net MVC 내부에 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" /> 
} 

하지만 난 내보내기 버튼을 아무것도에 clcik 때 발생하는 것입니다 ... 언제 내가 검색 클릭 내보내기 actin 메서드가 호출됩니다 .. 그래서 거기 Ajax.Beginform 중첩 된 방법은 무엇입니까 ??

+0

아니요, 중첩 된 양식은 유효하지 않은 html이며 지원되지 않습니다. 더 이상 사용되지 않는'Ajax.BeginForm()'메소드를 삭제하고 훨씬 더 융통성을주는'$ .ajax()'메소드를 사용하십시오. –

답변

0

HTML 5에는 중첩 된 양식이 허용되지 않습니다 (https://stackoverflow.com/a/26536925/3111689 참조).

나는 당신의 필터 ID의 어떤 종류 (예 : ID = "filter_ip")를 제공 한 다음 버튼을 다음과 같은 자바 스크립트를 실행하는 것이 좋습니다 것

:

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

길이가를 초과하는 것 이상의 매개 변수가있는 경우 get 요청의 한계, 당신은 자바 스크립트/아약스를 통해 게시물을 할 수 있습니다.

+0

하지만 제 경우에는 검색 매개 변수를 사용하여 URL을 수정할 수 없게됩니다. 아약스 기반으로 제출할 때 .. 제출하는 예제에서는 –

+0

을 제공합니다. 제출하지 않아도됩니다. gui에서 읽은 매개 변수를 사용하여 클라이언트를 내보내기 작업으로 리디렉션합니다. 그러면 브라우저가 파일을 응답으로 받으면 사용자는 사이트에서 변경 사항을 볼 수 없으며 생성 된 CSV를 다운로드하라는 메시지가 표시됩니다. – Stofa

관련 문제