连接复选框以查询作为值的过滤条件

时间:2012-04-01 11:41:34

标签: asp.net-mvc checkbox

我是MS MVC的新手,我遇到了这个问题。我尝试使用一些复选框过滤数据库中的数据。 我正在使用MS MVC。 LINQ to SQL,MS SQL Express。

 <% using (Html.BeginForm())
      { %>
      <fieldset>
      <legend>Search filter</legend>
      <fieldset style="width:130px;height:150px;float:left;margin-left:10px">
      <legend></legend>
    <table>
  <tr><td><%= Html.CheckBox("checkbox", false)%></td><td>Solar</td></tr>
  <tr><td><%= Html.CheckBox("checkbox1", false)%></td><td>Water</td></tr>
  <tr><td><%= Html.CheckBox("checkbox2", false)%></td><td>Biomas</td></tr>
  <tr><td><%= Html.CheckBox("checkbox3", false)%></td><td>Other....</td></tr>
  </table>
  </fieldset>

Controller.cs

public ActionResult Search()
        {
            return View();
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Search(FormCollection formValues)
        {
            string value = formValues["checkbox"];
            string value2 = formValues["checkbox1"];
            string value3 = formValues["checkbox2"];
            string value4 = formValues["checkbox3"];

            var dataContext = new powerPlantModelDataContext();

            var solar = from q in dataContext.TypeDetails
                              where q.KindName.Equals(value.ToString())
                              select q;

            if (solar != null) { ViewData["solar"] = solar.ToList(); }

            return View();
        }

收集并查看view.aspx中的数据

<%foreach (RenewalSourcesWeb.Models.TypeDetail solar in (List<RenewalSourcesWeb.Models.TypeDetail>) ViewData["solar"]) {%>
    <table>

    <tr><td>Value1</td><td><%=solar.Description %></td></tr>
    <tr><td>Value2</td><td><%=solar.KindName %></td></tr>

    </table>
    <%} %>

我的问题是,复选框值是假设是真或假没有复选框,我不能使这工作。 如果有人有一些建议,我会感激任何帮助。如果有人建议解决多个复选框是真的。

1 个答案:

答案 0 :(得分:1)

以下是一些建议:

1。)除非您有强制要求使用MVC版本2或1的要求,否则请从WebForms视图引擎(&lt;%语法,如此%&gt;)更改为Razor视图引擎(@Syntax.LikeThis )。

2.。)使用强类型的ViewModel而不是ViewData

public class SearchViewModel
{
    public bool checkbox { get; set; }
    public bool checkbox1 { get; set; }
    // ...etc
}

public ActionResult Search()
{
    return View(new SearchViewModel());
}

<tr><td>@Html.CheckBoxFor(m => m.checkbox)</td><td>Solar</td></tr>
<tr><td>@Html.CheckBoxFor(m => m.checkbox1)</td><td>Water</td></tr>

[HttpPost]
public ActionResult Search(SearchViewModel model)
{
    string value = model.checkbox;
    string value2 = model.checkbox1;
    // ...etc

3。)搜索时,使用GET而不是POST提交表单。 POST是在您更改数据时,GET用于查询数据(如搜索)。

@using (Html.BeginForm("Search", "Search", FormMethod.Get))
{
    ...