Asp.net mvc 如何通过在MVC中单击按钮将参数传递给控制器?

Asp.net mvc 如何通过在MVC中单击按钮将参数传递给控制器?,asp.net-mvc,asp.net-mvc-3,razor,devexpress,Asp.net Mvc,Asp.net Mvc 3,Razor,Devexpress,请有人帮助我如何将组合框中的参数绑定到控制器中某个操作的参数。我正在使用DevExpress控件套件,以下是我的代码: [HttpPost] public ActionResult Filter(string filterCriteria) { ViewData.Model = Repository.GetReports(filterCriteria); return RedirectToAction("Index"); } 这是我的观点: <div styl

请有人帮助我如何将组合框中的参数绑定到控制器中某个操作的参数。我正在使用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>

只是想看看我是否能够传回任何值,但这失败了。有人能详细说明一下这样做的方法吗?谢谢,

从我收集的信息中,您想检索控制器端“checkListBox”列表框中选择的多个项目。 如果是,请按以下方式使用该方法:

[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");
}
[HttpPost]
公共操作结果筛选器(字符串筛选器准则)
{
//listBoxSettings.Name=“checkListBox”;
string[]values=ListBoxExtension.GetSelectedValues(“checkListBox”);
filterCriteria=值。。。
ViewData.Model=Repository.GetReports(filterCriteria);
返回操作(“索引”);
}

我知道这是一个较老的问题,但我想我可以添加使用
viewbag
,它允许您将数据从控制器发送到视图,反之亦然。下面是一个来自中国的例子

控制器

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

    return View();
}
查看

@ViewBag.MyMessageToUsers
@Html.TextBox("AnswerText")

我认为最好的方法是通过Jquery调用。您对这个选项感兴趣吗?您的@Html.BeginForm的其他选项在哪里??
@ViewBag.MyMessageToUsers
@Html.TextBox("AnswerText")