我在使用我的webgrid上的JS进行排序时遇到了问题。因此,想法是用户将字符串输入到文本框中,并刷新webgrid bellow(在匹配结果上进行过滤),而不刷新孔页面。现在我的代码可以很好地刷新页面,并在点击按钮时触发过滤。
这是标记:
@model List <BTGHRM.Models.HarmingFactorClass>
@{
BTGHRM.Models.HarmingFactorClass sorting = new BTGHRM.Models.HarmingFactorClass();
}
@Resources.Localization.filter:
<br />
@using (Html.BeginForm("FactorFieltering", "Administration", FormMethod.Post))
{
<table style = "width:100%" >
<tr>
<td style="width:10%">
@Html.Label("Nr", @Resources.Localization.nr)
</td>
<td style="width:90%">
@Html.Label("Desc", @Resources.Localization.description)
</td>
</tr>
<tr>
<td>
@Html.TextBox("nr", sorting.Nr)
</td>
<td>
@Html.TextBox("desc", sorting.Description)
</td>
</tr>
</table>
<input type="submit" value="go" />
}
<br />
@using (Ajax.BeginForm("WorkplaceHealthFactors", null, new AjaxOptions() { UpdateTargetId = "FormContainer", HttpMethod = "Post", InsertionMode = InsertionMode.Replace, OnSuccess = "UpdateSuccess", OnFailure = "UpdateFailure" }, new { id = "UpdateForm" }))
{
WebGrid grid = new WebGrid(Model, canSort: false);
int row = 0;
if (Model.Any())
{
@grid.GetHtml(
htmlAttributes: new { id = "examples" },
tableStyle: "table",
headerStyle: "table_HeaderStyle",
footerStyle: "table_PagerStyle",
rowStyle: "table_RowStyle",
alternatingRowStyle: "table_AlternatingRowStyle",
selectedRowStyle: "table_SelectedRowStyle",
columns: grid.Columns(
grid.Column("Nr", @Resources.Localization.nr, format: @<text>
<span class="display-mode"><label id="NrLabel">@item.Nr</label></span>
@Html.TextBox("Model[" + (++row - 1).ToString() + "].Nr", (object)item.Nr, new { @class = "edit-mode" })
</text>, style: "p10"),
grid.Column("Description", @Resources.Localization.description, format: @<text>
<span class="display-mode"><label id="DescriptionLabel">@item.Description</label></span>
@Html.TextBox("Model[" + (row - 1).ToString() + "].Description", (object)item.Description, new { @class = "edit-mode" })
@Html.Hidden("Model[" + (row - 1).ToString() + "].HarmingFactorId", (object)item.HarmingFactorId)
</text>, style: "p80"),
grid.Column("", "", format: @<text>
<a href="" id="@item.HarmingFactorId" class="link_button edit-button display-mode">@Resources.Localization.edit</a>
<a href="DeleteWorkplaceHealthFactorRecord/@item.HarmingFactorId" id="@item.HarmingFactorId" class="link_button delete-button display-mode">@Resources.Localization.delete</a>
<a href="" id="@item.HarmingFactorId" class="link_button update-button edit-mode">@Resources.Localization.update</a>
<a href="" id="@item.HarmingFactorId" class="link_button cancel-button edit-mode">@Resources.Localization.cancel</a>
</text>)
)
)
}
}
这是我在控制器中的排序方法:
[HttpPost]
public ActionResult FactorFieltering(string desc, string nr)
{
using (var db = new HRMEntities())
{
List<CatalogHarmingFactor> harmingFactorList = db.CatalogHarmingFactors.Where(e => e.Nr.Contains(nr) && e.Description.Contains(desc))).ToList();
List<HarmingFactorClass> model = new List<HarmingFactorClass>();
foreach (var item in harmingFactorList)
{
model.Add(new HarmingFactorClass(){Nr=item.Nr, Description=item.Description, HarmingFactorId= item.HarmingFactorId });
}
return View("Partial/_WorkplaceHealthFactors", model);
}
}
为了解决我的问题,必须添加哪些JS部分?
答案 0 :(得分:2)
Search()
函数。Search()
或nr
文本框内输入desc
Search()
函数内部使用$.get
调用控制器中的局部视图,并返回用户在文本框中键入的数据的局部视图:<强>控制器:强>
public class AdministrationController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpGet]
public PartialViewResult FactorFiltering(string nr,string desc)
{
//Write your search functionality and pass the model to the partial view...
return PartialView("~/Views/Partial/_WorkplaceHealthFactors.cshtml");
}
}
查看:强>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$("#nr").on('keyup', function () {
Search();
});
$("#desc").on('keyup', function () {
Search();
});
function Search() {
var nr = $("#nr").val();
var desc = $("#desc").val();
$.get('@Url.Action("FactorFiltering", "Administration")', { nr: nr, desc: desc }, function (data) {
$("#result").html(data);
});
}
});
</script>
@Html.TextBox("nr")
@Html.TextBox("desc")
<div id="result">
</div>