2012-09-17 2 views
0

누군가 내 콤보 상자의 매개 변수를 내 컨트롤러의 매개 변수 중 하나에있는 매개 변수에 묶는 방법을 알려주기를 바랍니다. 나는 DevExpress의 제어 제품군을 사용하고이 내 코드입니다 :MVC에서 버튼을 클릭하여 컨트롤러에 매개 변수를 전달하는 방법은 무엇입니까?

[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> 

나는 기본적으로 하단에있는 gridview가 나는 드롭 다운 목록으로 필터링 할 것 그 위에. 내 컬렉션을 필터로 이동하기 위해 버튼을 사용하여 액션을 호출합니다. 이 예에서, 난 그냥 내가하지만 실패 값을 다시 통과 할 수 있어요 경우 즉

settings.Properties.ClientSideEvents.ValueChanged = "function(s, e) {e.customArgs[\"filterCriteria\"] = checkComboBox.Name.toString();}"; 

그냥보고 다시 컨트롤의 이름을 전달하려고 노력했다. 누군가가 정교한 방법으로이 작업을 수행 할 수 있습니까? 감사합니다,

+1

나는 가장 좋은 방법은 jQuery를 호출을 통해 것 같아요. 이 옵션에 관심이 있으십니까? –

+0

@ Html.BeginForm에 대한 나머지 옵션은 어디에 있습니까? – CrazyCoderz

답변

2

수집 한 항목에서 컨트롤러 쪽의 "checkListBox"ListBox에서 선택한 여러 항목을 검색하려고합니다. 그렇다면, 다음 방법으로 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"); 
} 
+0

의미가 있습니까? – Mikhail

0

난이 오래된 질문 알아요,하지만 난 당신이 볼 컨트롤러에서 데이터를 보낼 수 viewbag의 사용을 추가 할 수 있습니다 생각하고, 그 반대의 경우도 마찬가지입니다. 다음은 mdsn의 예입니다.

컨트롤러

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

    return View(); 
} 

보기

@ViewBag.MyMessageToUsers 
@Html.TextBox("AnswerText") 
관련 문제