第二个控制器方法调用上的双URL参数

时间:2015-11-15 17:39:21

标签: c# asp.net-mvc

我有一个控制器,在我的索引视图中提交一个搜索字段。

  [System.Web.Mvc.HttpGet]
    public ActionResult ShowResultsWithFilter(SearchModelWithFilters searchModel)
    {
        //Logic and setting viewbag values

        return View(searchModel);
    }

网址会返回我的结果。  如

  

“URL /结果/ ShowResultsWithFilter?searchString的= ASTRINGTOSEARCH”

我的提交模式

public class SearchModelWithFilters

    public string searchString { get; set; }
    public bool filterA { get; set; }
    public bool filterB { get;  set; }
    public bool filterC {get; set;}

    public SearchModelWithFilters()
    {
        //My initial values which should be defaut when first loading the results page
        filterA = true;
        filterB = true;
        filterC = true;
    }
}

搜索和过滤器也在结果页面上,因此我使用相同的控制器重新提交新的或相同的详细信息,并且网址返回为

  

“URL /结果/ ShowResultsWithFilter searchString的= ASTRINGTOSEARCH&安培; filterA =假安培; filterA =真安培; filterB =假安培; filterB =真安培; filterC =假安培; filterC =真”

每个过滤器的第一个实例始终为false,第二个实例基于提交的值进行更新。

我希望它只显示正确更新的参数(我的过滤器),而不是双倍。

我的搜索字段视图(SearchField)

@model CodeCompareUk.Models.SearchModelWithFilters

<div class="row">
    <div class="col-md-12">
            <div class="input-group input-group-lg">
                @Html.TextBoxFor(m => m.searchString, new { @class = "form-control", @placeholder = "Enter Search..." })
                <a href="javascript:$('form').submit();" class="input-group-addon">
                    <i class="fa fa-search"></i>
                </a>
            </div>
    </div>
</div>

我把它放在这个表单助手中,在结果页面中还包括部分“精炼搜索”

@using (Html.BeginForm("ShowResultsWithFilter", "Result", method: FormMethod.Get))
   {

       @Html.Partial("SearchField")

       //also this is only added in results page
       @Html.Partial("RefineSearch")


}

我的精炼搜索(RefineSearch)

@model CodeCompareUk.Models.SearchSubmitModelWithFilters
 @Html.CheckBoxFor(me => me.FilterA, new { @class = "custom-checkbox" })
  @Html.CheckBoxFor(me => me.FilterB, new { @class = "custom-checkbox" })
  @Html.CheckBoxFor(me => me.FilterC, new { @class = "custom-checkbox" })

由于

1 个答案:

答案 0 :(得分:2)

这就是CheckBoxFor的工作原理。它会创建2个<inputs> - 一个&#34;隐藏&#34;和第二个&#34;复选框&#34;。请注意,通常使用&#34; POST&#34;提交表单。不是&#34; GET&#34;。无论如何,请在此处查看有关CheckBoxFor的更多信息:

Why does the CheckBoxFor render an additional input tag, and how can I get the value using the FormCollection?