2010-10-26 7 views
0

J'ai une liste déroulante du côté client. Lorsque l'utilisateur fait une sélection, mon script jquery extrait la nouvelle valeur de la sélection. Mais le code ci-dessous ne fonctionne pas parce que je ne peux pas calculer comment renvoyer la valeur sélectionnée au contrôleur. Je ne suis pas sûr de la syntaxe de l'envoi des paramètres car j'utilise des paramètres de pagination tels quels. Peut-être que je devrais faire un appel Ajax à la place?Liste déroulante MVC qui contrôle une grille - quelle est la meilleure façon de faire fonctionner cela?

La vue ressemble;

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    BankHoliday 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="AdminAccountsContent" runat="server"> 
    <% using (Html.BeginForm()) 
     {%> 
     <%: Html.AntiForgeryToken() %> 
     <h3>Bank Holiday Administration</h3> 
     <p>Select the year: <%: Html.DropDownListFor(model => model.SelectedYear, Model.YearList)%></p> 
      <fieldset> 
      <legend>Enter the bank holidays here:</legend> 
      <table> 
       <tr><td colspan="3"><i>You can find the bank holiday dates on this <a target="_blank" href="http://www.year-planner-calendar.wanadoo.co.uk/">website</a>.</i> </td></tr> 
       <tr> 
        <th>Bank Holiday</th> 
        <th>Date</th> 
        <th>Notes</th> 
       </tr> 
       <% foreach (var bankHolidayExtended in Model.BankHolidays) 
        { %> 
        <% Html.RenderPartial("BankHolidaySummary", bankHolidayExtended); %> 
       <% } %> 
       <tr> 
        <td align="center" colspan="3" style="padding-top:20px;"> 
         <input type="submit" value="Save"/> 
        </td> 
       </tr> 
       <% if (ViewData["UpdatedFlag"] == "True") 
        { %> 
        <tr> 
         <td id="confirmationMessage" colspan="3"> 
          At time <% Response.Write(DateTime.Now.ToString("T")); %> - Details have been successfully saved 
         </td> 
        </tr> 
        <%} 
        else if (ViewData["UpdatedFlag"] == "False") 
        {%> 
        <tr> 
         <td id="Td1" colspan="3"> 
          At time <% Response.Write(DateTime.Now.ToString("T")); %> - ERROR! Details have NOT been saved 
         </td> 
        </tr> 
        <%} %> 
      </table> 
      </fieldset> 
     <% } %> 
     <script language="javascript" type="text/javascript"> 
      $(function() { 
       $("#SelectedYear").change(function() { 
        var year = $("#SelectedYear").val(); 
        $("#wholepage").load("/BankHoliday/Create/" + year); 
       }); 
      }); 

    </script> 
</asp:Content> 

et le contrôleur ressemble;

public ActionResult ListHistory (tri GridSortOptions, int page int EmployeeStatusId?) { si (Request.QueryString [ "lastPersonMessage"] == null) ViewData [ "LastPersonMessage"] = string.Empty; else ViewData ["LastPersonMessage"] = Request.QueryString ["lastPersonMessage"];

IEnumerable<EmployeeExtended> employees = null; 

    switch (EmployeeStatusId.GetValueOrDefault(1)) 
    { 
     case 1: employees = EmployeeExtended.GetAllFormerEmployees(); 
      break; 
     case 2: employees = EmployeeExtended.GetAllOnNoticeEmployees(); 
      break; 
     case 3: employees = EmployeeExtended.GetAllCurrentEmployees(); 
      break; 
    } 
    if (sort.Column != null) 
    { 
     employees = employees.OrderBy(sort.Column, sort.Direction); 
    } 
    int pageLength = Convert.ToInt32(ConfigurationManager.AppSettings["EmployeeListPageLength"].ToString()); 
    employees = employees.AsPagination(page ?? 1, pageLength); 
    ViewData["sort"] = sort; 
    return View(employees); 
} 

Répondre

0

Vous pouvez à l'intérieur d'un appel Ajax.BeginForm() mais l'URL ne changerait alors .. - signifie: chaque fois que vous rafraîchir, il vous renvoie revenir à la page par défaut ..

Je l'ai déjà fait quelque chose de très semblable à ceci:

<%: Html.DropDownList(Model => Model.SelectedYear, Model.YearList, new { onchange = "location.href='/Controller/Action/'+this.value" }) %> 

cela devrait fournir une base sur la résolution de la question. Que feriez-vous si la méthode que vous souhaitez appeler sur votre automate a la signature suivante:

+0

public ActionResult ListHistory (GridSortOptions sort, int? page, int? EmployeeStatusId) – arame3333

+0

Vous pouvez essayer quelque chose comme: 'new {onchange =" location.href = '/ Contrôleur/Action? sort = SomeValue & page = SomeValue & EmployeeStatusId = SomeValue} ' –

Questions connexes