0

誰かが、コンボボックスからコントローラー内のアクションの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();}";

値を返すことができるかどうかを確認するだけですが、これは失敗しました。誰かがこれを行う方法について詳しく説明してもらえますか?ありがとう、

4

2 に答える 2

2

私が収集したものから、コントローラー側の「checkListBox」リストボックス内で選択された複数のアイテムを取得したいとします。その場合は、次の方法でListBoxExtension.GetSelectedValuesメソッドを使用します。

[HttpPost]
public ActionResult Filter(string filterCriteria)
{
    //listBoxSettings.Name = "checkListBox";

    string[] values = ListBoxExtension.GetSelectedValues<string>("checkListBox");
    filterCriteria = values...

    ViewData.Model = Repository.GetReports(filterCriteria);
    return RedirectToAction("Index");
}
于 2012-09-23T16:48:11.963 に答える
0

viewbagこれは古い質問ですが、コントローラーからビューに、またはその逆にデータを送信できるようにするための使用法を追加するだけかもしれないと思いました。これはmdsnの例です。

コントローラ

public ActionResult Index()
{
    ViewBag.MyMessageToUsers = "Hello from me.";
    ViewBag.AnswerText = "Your answer goes here.";

    return View();
}

見る

@ViewBag.MyMessageToUsers
@Html.TextBox("AnswerText")
于 2014-09-23T09:57:08.477 に答える