誰かが、コンボボックスからコントローラー内のアクションの1つにあるパラメーターにパラメーターを結び付ける方法を手伝ってくれますか。私はDevExpressコントロールスイートを使用しています。これが私のコードです。
[HttpPost]
public ActionResult Filter(string filterCriteria)
{
ViewData.Model = Repository.GetReports(filterCriteria);
return RedirectToAction("Index");
}
そしてこれは私の見解です:
<div style="float:right;padding-bottom:20px;" >
@using (Html.BeginForm())
{
<table><tr><td>
Filter by Keyword:</td>
<td>
@Html.DevExpress().DropDownEdit(
settings =>
{
settings.Name = "checkComboBox";
settings.Width = 210;
settings.Theme = Utils.CurrentTheme;
settings.Properties.DropDownWindowStyle.BackColor = System.Drawing.Color.FromArgb(0xEDEDED);
settings.Properties.ClientSideEvents.ValueChanged = "function(s, e) {e.customArgs[\"filterCriteria\"] = checkComboBox.Name.toString();}";
settings.SetDropDownWindowTemplateContent(c =>
{
@Html.DevExpress().ListBox(
listBoxSettings =>
{
listBoxSettings.Name = "checkListBox";
listBoxSettings.SkinID = "CheckComboBoxListBox";
listBoxSettings.CallbackRouteValues = new { Controller = "Report", Action = "Filter" };
listBoxSettings.Theme = Utils.CurrentTheme;
listBoxSettings.ControlStyle.Border.BorderWidth = 2;
listBoxSettings.ControlStyle.BorderBottom.BorderWidth = 1;
listBoxSettings.ControlStyle.BorderBottom.BorderColor = System.Drawing.Color.FromArgb(0xDCDCDC);
listBoxSettings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
listBoxSettings.Height = 100;
listBoxSettings.Properties.SelectionMode = ListEditSelectionMode.CheckColumn;
listBoxSettings.Properties.ClientSideEvents.SelectedIndexChanged = "OnListBoxSelectionChanged";
}
).BindList(Repository.GetKeywords())
.Render();
ViewContext.Writer.Write("<table style=\"width:100%\"><tr><td align=\"right\">");
@Html.DevExpress().Button(
buttonSettings =>
{
buttonSettings.Name = "buttonClose";
buttonSettings.Text = "Close";
buttonSettings.Style.Add("float", "right");
buttonSettings.Theme = Utils.CurrentTheme;
buttonSettings.ClientSideEvents.Click = "function(s, e){ checkComboBox.HideDropDown(); }";
}
)
.Render();
ViewContext.Writer.Write("</td></tr></table>");
});
settings.Properties.EnableAnimation = true;
settings.Properties.ClientSideEvents.TextChanged = "SynchronizeListBoxValues";
settings.Properties.ClientSideEvents.DropDown = "SynchronizeListBoxValues";
}
).GetHtml()
</td><td>
@Html.DevExpress().Button(
settings =>
{
settings.Name = "btnApply";
settings.ControlStyle.CssClass = "button";
settings.Text = "Apply";
settings.UseSubmitBehavior = true;
settings.Theme = Utils.CurrentTheme;
settings.Width = 80;
settings.RouteValues = new { Controller = "Report", Action = "Filter" };
}
).GetHtml()
</td><td>
@Html.DevExpress().Button(
settings =>
{
settings.Name = "btnClear";
settings.ControlStyle.CssClass = "button";
settings.Text = "Clear";
settings.ClientSideEvents.Click = "function(s, e){ ASPxClientEdit.ClearEditorsInContainer(); }";
settings.Theme = Utils.CurrentTheme;
settings.Width = 80;
}
).GetHtml()
</td></tr></table>
}
</div>
基本的に下部にグリッドビューがあり、その上にドロップダウンリストを使用してフィルタリングしたいと思います。ボタンを使用してアクションを呼び出し、コレクションをフィルタリングします。この例では、コントロールの名前を返そうとしていました。
settings.Properties.ClientSideEvents.ValueChanged = "function(s, e) {e.customArgs[\"filterCriteria\"] = checkComboBox.Name.toString();}";
値を返すことができるかどうかを確認するだけですが、これは失敗しました。誰かがこれを行う方法について詳しく説明してもらえますか?ありがとう、