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);
}
public ActionResult ListHistory (GridSortOptions sort, int? page, int? EmployeeStatusId) – arame3333
Vous pouvez essayer quelque chose comme: 'new {onchange =" location.href = '/ Contrôleur/Action? sort = SomeValue & page = SomeValue & EmployeeStatusId = SomeValue} ' –