jQuery没有清除TextBox,而$ .get()也没有传递参数

时间:2015-01-26 17:39:02

标签: c# jquery asp.net-mvc razor

我在页面上有一个项目列表,能够通过文本框过滤(类似于MVC教程)。我有一个按钮,我想清除 TextBox中的文本并调用控制器函数,然后将项目列表恢复到其初始的,未过滤的状态。

我遇到的问题是双重的:我清除TextBox文本的jQuery代码不会清除搜索词的TextBox,而我的jQuery代码显式传入空字符串为我的控制器的参数不会传入该参数。

例如:

  1. Page有一个列表。
  2. 我在过滤框中输入“fart”,然后按回车。
  3. 页面重新加载,现在按“fart”过滤了东西列表。
  4. 我按下清除按钮。
  5. 页面重新加载,但是东西列表仍然被“fart”过滤,并且TextBox没有被清除。
  6. 我怀疑这完全是由于TextBox没有被清除,但老实说我不知道​​。

    Index.cshtml

    @{
        ViewBag.Title = "Index";
        var modelitem = new MyThing();
    }
    
    @model IEnumerable<MyModel>
    
    <script type="text/javascript">
        function fart() {
            $('#reset').click(function() {
                $('#filterTerm').val('');
                $.get("SelectionSummary/Index", { filterTerm: '' })
            });
        }
    </script>
    
    @using (Html.BeginForm())
    {
        <div class="input-group center-block">
            <h3 class="text-center">Selections</h3>
            @Html.AntiForgeryToken()
            @Html.TextBox("filterTerm", null, new
                       {
                            @id = "filterTerm",
                            @class = "form-control col-md-offset-2",
                            @placeholder = "Filter"
                       })
            <input id="reset" class="btn btn-info" type="submit" value="reset" onclick="fart"/>
        </div>
    }
    
    <br />
    @if (Model != null && Model.Any())
    {
    <div class="panel panel-default col-md-offset-2" style="width:62%">
        <div class="panel-body">
            <br />
            <table class="table table-striped text-center">
    
                <tr>
                    <th>
                        @Html.DisplayFor(m => modelitem.NameLabel)
                    </th>
                    <th>
                        @Html.DisplayFor(m => modelitem.Thing)
                    </th>
                </tr>
                @foreach (var thing in Model.OrderBy(g => g.Name))
                {
                    <tr>
                        <th>
                            @Html.ActionLink(thing.Name, "Detail", new { selectionSearchTerm = thing.Name })
                        </th>
                        <th>
                            @Html.DisplayFor(m => thing.Other.Name)
                        </th>
                    </tr>
                }
            </table>
        </div>
    </div>
    }
    else
    {
        <h4 class="text-center">No results</h4>
    }
    

    SelectionSummaryController.cs

     public ActionResult Index(string filterTerm = "")
     {
            var stuff= m_repo.GetAllStuff();
            if (stuff.IsNullOrEmpty()) // extension method
            {
                return View();
            }
    
            if (filterTerm.HasValue()) // extension method
            {
                stuff= stuff.Where(t => t.Name.Contains(filterTerm));
            }
    
            return View(stuff.ToList());
     }
    

1 个答案:

答案 0 :(得分:0)

我相信您的问题在于使用HasValue.我会改为:

public ActionResult Index(string filterTerm = "")
 {
        var stuff= m_repo.GetAllStuff();
        if (stuff.IsNullOrEmpty())
        {
            return View();
        }

        if (!string.IsNullOrEmpty(filterTerm))
        {
            stuff= stuff.Where(t => t.Name.Contains(filterTerm));
        }

        return View(stuff.ToList());
 }

此外,你的JavaScript没有意义。单击按钮时,为什么要在按钮上放置单击事件处理程序?试试这个。

<script type="text/javascript">
    function fart() {
            $('#filterTerm').val('');
            $.get("SelectionSummary/Index", { filterTerm: '' })
    }
</script>

话虽如此,我不确定你为什么甚至使用那个ajax get。你没有对数据做任何事情。