2012-05-28 7 views
2

Ajax 양식에 약간의 문제가 있습니다. 나는 의심 할 여지없이 약간 뒤로 거쳤습니다. 기본적으로 양식의 제출 버튼을 누르면 아무 일도 일어나지 않습니다. 나는 디버깅을했지만 액션 메소드에 게시하지 않는 것으로 보입니다. 문자 그대로 아무것도하지 않습니다.Asp.Net MVC Ajax 양식이 게시되지 않음

은 기본적으로 내가 DetailedBreakdownReportRequest의 모델과 양식에서 정보를 게시 :

여기에 지금까지 내 코드입니다. 내 페이지가 필터링되지 않은 초기 결과 목록을 표시 할 때이 모델은 정상적으로 통과됩니다.

DetailedBreakdownReport 작업 방법 :

[HttpPost] 
public ActionResult DetailedBreakdownReport(DetailedBreakdownReportRequest reportRequest, FormCollection formVariables) 
{ 
    return View(reportRequest); 
} 

DetailedBreakdownReport보기

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Main.Master" Inherits="System.Web.Mvc.ViewPage<MyApp.Data.AdvancedReports.AdvancedReports.DetailedBreakdownReports.DetailedBreakdownReportRequest>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Detailed Breakdown Report 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<script language="javascript" type="text/javascript" src="<%= ResolveUrl("~/Scripts/jquery-1.4.1.min.js")%>"></script> 
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 

<% using (Ajax.BeginForm("DetailedList", "Reports", 
     new AjaxOptions 
     { 
      UpdateTargetId = "panelBreakdownList", 
      InsertionMode = InsertionMode.Replace 
     }, 
     new { id = "SearchForm" })) %> 
<% { %> 

       <div style="position: absolute; top: 0px; height: 30px; right: -12px; margin-top: 8px; 
    width: 250px; padding-left: 00px; vertical-align: middle; display: inline-block;"> 
     <input id="searchField" name="searchField" style="padding-left: 5px; position: relative; 
     float: left; top: 3px; margin: 0px; border: 1px solid #DDDDDD; height: 19px; 
     width: 200px;" /> 
     <%: Html.HiddenFor(m => m.ToDate) %> 
     <%: Html.HiddenFor(m => m.FromDate) %> 
     <%: Html.HiddenFor(m => m.Currency) %> 
     <%: Html.HiddenFor(m => m.ReportType) %> 
     <!--<input type="image" src="/Content/Images/search-form-submit.png" style="border: 0px; 
     height: 27px; position: relative; left: -8px; margin: 0x; float: left;" />--> 
     <input type="submit" value="Search" style="border: 0px; 
     height: 27px; position: relative; left: -8px; margin: 0x; float: left;" /> 
    </div> 
<% } %> 

<div id="panelBreakdownList" style="position: relative; z-index: 0;"> 
     <% Html.RenderAction("DetailedList", new { ToDate = Model.ToDate, FromDate = Model.FromDate, Currency = Model.Currency, ReportType = Model.ReportType }); %> 
</div> 


</asp:Content> 

<asp:Content ID="Content4" ContentPlaceHolderID="Header" runat="server"> 
<h1>Detailed Breakdown Report</h1> 
<h2><%: Model.ToDate.ToString("dd-MMM-yyyy") %> to <%: Model.FromDate.ToString("dd-MMM-yyyy")%></h2> 
</asp:Content> 

여기에 위의 페이지에서 호출되는 DetailedList 조치이며, 그보기이다 : 나는대로

[HttpPost] 
public ActionResult DetailedList(DateTime ToDate, DateTime FromDate, string Currency, string ReportType, FormCollection formVariables) 
{ 
    DetailedBreakdownReportRequest reportRequest = new DetailedBreakdownReportRequest() 
    { 
     ToDate = ToDate, 
     FromDate = FromDate, 
     Currency = Currency, 
     ReportType = ReportType, 
     UserId = UserServices.CurrentUserId 
    }; 

    DrilldownReportEngine re = new DrilldownReportEngine(); 
    DetailedBreakdownReport report = null; 

    if (formVariables.HasKeys()) 
    { 
     reportRequest.searchTerm = formVariables["searchField"]; 
     report = re.GetDetailedBreakdown(reportRequest); 
    } 
    else 
    { 
     report = re.GetDetailedBreakdown(reportRequest); 
    } 

    return PartialView(report); 
} 

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Data.AdvancedReports.AdvancedReports.DetailedBreakdownReports.DetailedBreakdownReport>" %> 

    <% if (Model.HasData) 
     { %> 

     <% if (Model.ShopBreakdown != null) 
      { %> 

      <h2>Shop Breakdown Report</h2> 
      <p>Click on a shop's name to see additional information.</p> 
      <div id="shopGrid" style="float:left; width: 400px;"> 
       <table width="400px"> 
       <% foreach (var shop in Model.ShopBreakdown) 
       { %> 
       <tr> 
        <td colspan="3"><h2><%: Html.ActionLink(shop.Shop.Name + " >>", "ShopDashboard", new { ShopId = shop.Shop.ShopID, Currency = Model.Currency, toDate = Model.ToDate.ToString(), fromDate = Model.FromDate.ToString(), percentageOfSales = shop.RevenuePercentageOfSales })%></h2></td> 
       </tr> 
       <tr> 
        <td><p class="labels">Units Sold:</p></td> 
        <td><b style="font-size:larger;"><%: shop.UnitsSoldPerShop%></b></td> 
        <td rowspan="2" align="center"><h2><%: String.Format("{0:0.0%}", shop.RevenuePercentageOfSales)%></h2> of Total Revenue</td> 
       </tr> 
       <tr> 
        <td><p class="labels">Revenue Earned:</p></td> 
        <td><b style="font-size:larger;"><%: String.Format("{0:0.00}", shop.TotalRevenuePerShop)%></b></td> 
       </tr> 
       <tr> 
        <td colspan="3">&nbsp;</td> 
       </tr> 
       <% } %> 
       </table> 
      </div> 
     <% } %> 



     <% if (Model.ProductBreakdown != null) 
      { %> 
       <% foreach (var product in Model.ProductBreakdown) 
       { %> 
         <div id="ProductGrid" style="float:left; width: 500px;"> 
        <div> 
        <h3><%: Html.ActionLink(product.Product.Name + " >>", "ProductDashboard", new { ProductId = product.Product.ProductID, Currency = Model.Currency, toDate = Model.ToDate.ToString(), fromDate = Model.FromDate.ToString(), percentageOfSales = product.RevenuePercentageOfSales })%></h3> 
        </div> 
        <div style="float:left; width: 200px;"> 
          <p class="labels">Units Sold: </p><b style="font-size:larger;"><%: product.TotalUnitsSoldPerProduct %></b> 
          <br /> 
          <p class="labels">Revenue Earned: </p><b style="font-size:larger;"><%: String.Format("{0:0.00}", product.OverallTotalRevenuePerProduct)%></b> 
        </div> 
        <div style="float: left; text-align: center;"> 
          <h2><%: String.Format("{0:0.0%}", product.RevenuePercentageOfSales)%></h2> of Total Revenue 
        </div> 

       </div> 

       <% } %> 

       <div style="clear:both;" /> 
       <br /> 


    <% } %> 
    <% } %> 

위의 첫로드에서 페이지가 잘 표시되고 필터링되지 않은 상태로 표시됩니다. 결과보기. 텍스트 상자에 값을 입력하고 제출을 클릭하면 아무 일도 일어나지 않으며 디버깅하기가 어렵습니다. 적어도 그것이 뭔가를했다면 나는 함께 일할 것이 있습니다. 내가 여기 뭔가 잘못하고 있는지 누구라도 볼 수 있니?

답변

1

알다시피, 폼에서 예상되는 actions detailedList의 일부 null 허용되지 않는 변수가 필요합니다.

[HttpPost] 
public ActionResult DetailedList(DateTime ToDate, DateTime FromDate, string Currency, string ReportType, FormCollection formVariables) 
{ 
    ...... 
} 

하지만 검색 필드를 양식 컬렉션으로 보내면됩니다. 양식의 ToDate, FromDate, Currency 변수는 어디에 있습니까?

난 당신이

DetailedListSearchModel 
    DateTime ToDate 
    DateTime FromDate 
    string Currency 
    string ReportType 
    string Searchfield 

forexample formmodel을 만들고 partialview를 검색해야한다 생각합니다. 부분 뷰를 기본값으로 렌더링 한 다음 폼으로 실행할 때 기본값을 전달하십시오.

그런 다음 당신은 당신이에

<%= Html.LabelFor(m => m.Searchfield) %> 
<%= Html.TextBoxFor(m => m.Searchfield, new { @class = "css classes", maxlength = "1000" })%> 
<%= Html.ValidationMessageFor(m => m.Searchfield) %> 




$(function() { 
     $('form#SearchForm').find('a.submit-link').click(function() { 
      $('form#SearchForm').trigger('submit'); 
     }).show(); 
    } 

및 변경 검색 버튼과 같은 형태로이 모델을 사용할 수 있습니다

public ActionResult DetailedList(DetailedListSearchModel model) 
{ 
    ...... 
} 

[HttpPost] 같은 행동이 값을 취할 것입니다.

<a href="#" class="submit-link">Search</a> 
+0

빠른 답장을 보내 주셔서 감사합니다. 아무 것도 통과시키지 않는 것에 대해 완벽한 의미를 갖습니다. 내 질문에 위와 같이 코드를 업데이트하기 전에 변경 사항이 있는지 확인하기 위해 숨겨진 필드를 포함하도록 업데이트했습니다. 여전히 제출 버튼은 클릭 할 때 아무 것도하지 않습니다. 다른 아이디어? – 109221793

+0

ajax 양식이므로 양식을 제출해야합니다. 나는 샘플을 포함했다. – gandil