如何在 mvc 中更改 @Html.EditorFor 时进行回发?
How to go to postback on change of @Html.EditorFor in mvc?
我有一个代表搜索字段的 @Html.EditorFor
。当字段中的文本更改时,我试图在控制器中进行搜索。
我不知道每次输入中的文本更改时如何去回发,而不是在单击提交按钮时。
型号:
public class MainWindow
{
[Key]
public int MainWindowId { get; set; }
public string SearchedString { get; set; }
}
查看:
@using (Html.BeginForm())
{
<div>
<label>search:</label>
@Html.EditorFor(model => model.SearchedString, new htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.SearchedString, "", new { @class = "text-danger" })
<input type="submit" value="search" class="btn btn-default" />
</div>
}
控制器:
[HttpPost]
public ActionResult Index([Bind(Include = "MainWindowId,SearchedString")] MainWindow mw)
{
ManageProduct mp = new ManageProduct();
if (ModelState.IsValid)
{
//search code
return View("Index",mw);
}
return View(mw);
}
使用AJAX提交表格。我将在示例中使用 jQuery。
聆听编辑器呈现的 <input>
的变化。
EDIT: 为实现这一点,我们使用编辑器提供给 HTML 输入的 ID 作为 jQuery 选择器(不要更改 ID ,因为 MVC 模型绑定器希望它采用某种格式)。使用浏览器开发者工具 (F12) 查找 ID。
您还需要为表单元素提供一个 ID,以便我们对其进行序列化以获取 post 数据。还提供一个占位符来呈现结果。
@using (Html.BeginForm("Index", "YourController", FormMethod.Post, new { id = "formId" })) {
<div id="placeholderId"></div>
@Html.EditorFor(model => model.SearchedString, new htmlAttributes = new { @class = "form-control" } })
JS函数转post形式,嵌入razor视图:
<script type="text/javascript">
function postForm() {
$.ajax({
url: $('#formId').attr('action'),
type: 'POST',
data: $('#formId').serialize(),
success: function(resultData) {
if (resultData) {
// update some placeholder element with the received data
$('#placeholderId').html(resultData);
}
}
});
}
JS 监听输入的变化,嵌入在剃须刀视图中。监听 keyup
事件,因为 change
只会在输入失去焦点后触发。在这里,我假设编辑器为输入提供了 id="SearchedString"
(可能会有所不同,例如,如果将其呈现为部分视图)。
$('#SearchedString').on('keyup', function () {
postForm();
});
</script>
为了防止您的服务器在用户键入时被请求淹没,请查看 jQuery.debounce
我有一个代表搜索字段的 @Html.EditorFor
。当字段中的文本更改时,我试图在控制器中进行搜索。
我不知道每次输入中的文本更改时如何去回发,而不是在单击提交按钮时。
型号:
public class MainWindow
{
[Key]
public int MainWindowId { get; set; }
public string SearchedString { get; set; }
}
查看:
@using (Html.BeginForm())
{
<div>
<label>search:</label>
@Html.EditorFor(model => model.SearchedString, new htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.SearchedString, "", new { @class = "text-danger" })
<input type="submit" value="search" class="btn btn-default" />
</div>
}
控制器:
[HttpPost]
public ActionResult Index([Bind(Include = "MainWindowId,SearchedString")] MainWindow mw)
{
ManageProduct mp = new ManageProduct();
if (ModelState.IsValid)
{
//search code
return View("Index",mw);
}
return View(mw);
}
使用AJAX提交表格。我将在示例中使用 jQuery。
聆听编辑器呈现的 <input>
的变化。
EDIT: 为实现这一点,我们使用编辑器提供给 HTML 输入的 ID 作为 jQuery 选择器(不要更改 ID ,因为 MVC 模型绑定器希望它采用某种格式)。使用浏览器开发者工具 (F12) 查找 ID。
您还需要为表单元素提供一个 ID,以便我们对其进行序列化以获取 post 数据。还提供一个占位符来呈现结果。
@using (Html.BeginForm("Index", "YourController", FormMethod.Post, new { id = "formId" })) {
<div id="placeholderId"></div>
@Html.EditorFor(model => model.SearchedString, new htmlAttributes = new { @class = "form-control" } })
JS函数转post形式,嵌入razor视图:
<script type="text/javascript">
function postForm() {
$.ajax({
url: $('#formId').attr('action'),
type: 'POST',
data: $('#formId').serialize(),
success: function(resultData) {
if (resultData) {
// update some placeholder element with the received data
$('#placeholderId').html(resultData);
}
}
});
}
JS 监听输入的变化,嵌入在剃须刀视图中。监听 keyup
事件,因为 change
只会在输入失去焦点后触发。在这里,我假设编辑器为输入提供了 id="SearchedString"
(可能会有所不同,例如,如果将其呈现为部分视图)。
$('#SearchedString').on('keyup', function () {
postForm();
});
</script>
为了防止您的服务器在用户键入时被请求淹没,请查看 jQuery.debounce