2012-05-28 2 views
2

У меня возникла проблема с формой Ajax. Я, наверное, сделал это немного назад, без сомнения. В принципе, когда я нажимаю кнопку отправки в форме, ничего не происходит. Я отлаживал, однако, похоже, что это не сообщение для метода действия. Он буквально ничего не делает.Asp.Net MVC Ajax Form Not Posting to Action

Вот мой код до сих пор:

В основном я выкладываю информацию из формы с моделью 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 /> 


    <% } %> 
    <% } %> 

В I сказанное выше, при первой загрузке страница отображается нормально, она отображает нефильтрованное представление результатов. Когда я ввожу значение в текстовое поле и нажимаю кнопку «Отправить», ничего не происходит, и я нахожу это трудным для отладки. По крайней мере, если бы он сделал что-то, с чем мне было бы с чем работать. Может ли кто-нибудь увидеть, что я делаю что-то не так?

ответ

1

Как я вижу, вы ожидаете, что в действии detailList ожидается несколько недействительных переменных, которые ожидаются из формы.

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

Но вы просто отправляете поисковое поле в виде коллекции. Где переменные ToDate, FromDate, Currency в форме?

Я думаю, вы должны создать formmodel Forexample

DetailedListSearchModel 
    DateTime ToDate 
    DateTime FromDate 
    string Currency 
    string ReportType 
    string Searchfield 

и сделать поиск PartialView. Просто передайте значения по умолчанию, когда частичное представление отображается со значениями по умолчанию, а затем выполняется в форме.

Тогда вы будете принимать эти значения в действии, как [HttpPost]

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

Вы можете использовать эту модель в форме, как

<%= 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(); 
    } 

и кнопку поиска изменения а.

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

благодарит за быстрый ответ. Делает прекрасный смысл не пропускать ничего. Я обновил свой вопрос, чтобы включить скрытые поля, чтобы проверить, не изменилось ли это до обновления моего кода, как вы сказали выше. Тем не менее кнопка отправки ничего не делает при нажатии. Любые другие идеи? – 109221793

+0

вы должны отправить форму, потому что это форма ajax. Я включил образец – gandil