【发布时间】:2019-02-01 17:52:46
【问题描述】:
因此,我正在尝试使用在搜索框中查询的数据更新 html 表的最佳(最用户友好和高性能)方式。
用户可以通过在搜索框中键入内容来搜索某些内容,我想重新加载该 html 表而没有(可见)回发/重新加载(如果可能),并让它表现得像动态刷新数据一样。
我所拥有的以及我目前正在做的事情如下: 一个 Razor Html.TextBox(...) 和一个 Javascript 函数,如下所示:
$(function () {
$('#txtSearchString').keyup(function () {
//Content to send
var searchvalue = $(this).val();
$.get('@Url.Action("Customers", "Home")', { "SearchValue": searchvalue });
});
});
其中 'txtSearchString' 是 Html.TextBox 的名称/ID。 当我在这个 txtbox 中输入内容时,它会转到一个 HttpGet 操作,在该操作中我会收到“搜索值”并查询我的数据库并返回符合我要求的结果。 注意,此操作与加载的初始操作相同。
除了返回我的模型(此更新数据所在的位置)之外,我还可以在调试时清楚地看到,在迭代结果列表时,我的控制器中也有更新结果(例如,初始列表包含 100项目,更新列表包含 20)但仍然在加载视图时,我看到的结果与最初加载的结果相同,它似乎没有在浏览器中上传视图。
我不知道为什么会这样。我不知道这是否是做我想做的最好的方式,我在部分视图方面没有经验,也不知道我是否更好地使用它,但无论我最终使用什么,我都想了解什么发生在后面并导致这种行为。
如果您有任何问题,需要更多澄清,请问我。 亲切的问候!
更新:
这就是我使用模型中的值填充/更新我的 html 表的方式:
<table class="table table-hover trCursor">
<thead>
<tr>
<th scope="col">
@Html.ActionLink("Id", "Customers", new { sortOrder = ViewBag.DateSortParm })
</th>
<th scope="col">
@Html.ActionLink("Name", "Customers", new { sortOrder = ViewBag.NameSortParm })
</th>
<th>...</th>
</tr>
</thead>
@foreach (var customer in Model.Customers)
{
<tr onclick="location.href='@(Url.Action("CustomerDetail", "Customer", new { Id = customer.ID }))'">
@Html.HiddenFor(c => customer.ID)
<td scope="row">@customer.ID</td>
<td>@customer.CustomerName</td>
<td>...</td>
</tr>
}
在哪里我可以看到“Model.Customers”在迭代时具有更新的值。
【问题讨论】:
-
您进行了 ajax 调用,但没有对返回的数据执行任何操作。您需要在成功回调中更新 DOM
-
在提供如下数据后只需稍作修改:
$.get('@Url.Action("Customers", "Home")', { "SearchValue": searchvalue }, function(result) { // update DOM here }). -
还要注意,您需要调用一个不同的方法,该方法只返回您想要在当前视图中更新的部分视图
-
如果 action 方法只有
return PartialView(...),那么使用$('#targetElementId').html(result)会将之前的 DOM 元素更新为新元素。请注意,初始页面加载和获取搜索关键字的操作方法应分开。 -
将
@foreach包围在<tbody id="xxx">中,然后有一个方法只返回您的<tr>元素,然后是$.get('@Url.Action(...)', { "SearchValue": searchvalue }, function(result) { $('#xxx').html(result); })(然后您也可以将@foreach替换为@ 987654331@)
标签: javascript asp.net-mvc model-view-controller get