如何为 Ajax.BeginForm MVC 刷新和重定向脚本
how make a script refresh and redirecting for Ajax.BeginForm MVC
我使用 Ajax.BeginForm
创建了一个表单
@using (Ajax.BeginForm("CreatePlayer", "Admin", null, new AjaxOptions() { HttpMethod = "post" }))
{
<div class="row">
<div class="col-md-6">
<div class="text-style-roboto form-group">
<label>Имя</label>
@Html.TextBoxFor(x => x.Name, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Name)
</div>
<div class="form-group">
<button type="submit" class="button button-create">Добавить</button>
</div>
</div>
</div>
}
当我按下创建新播放器的按钮时,会创建一个播放器,但表格会保持填充状态。
,
期望的行为是应该清除表单,但事实并非如此。我不知道如何使用 jQuery 清除表格。我应该刷新页面,还是其他方式。
我在控制器中的 post 操作是 -
[HttpPost]
public JsonResult CreatePlayer(CreatePlayerModel model, string TeamNameId)
{
if (ModelState.IsValid)
{
if (TeamNameId != string.Empty)
{
try
{
int newTeamId = int.Parse(TeamNameId);
repository.CreatePlayer(model, newTeamId);
TempData["message"] = string.Format("Игрок {0} {1} сохранены", model.Name, model.Surname);
return new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { result = "success" }
};
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
}
}
}
IEnumerable<SelectListItem> list = new SelectList(repository.Teams, "Id ", "Name");
ViewBag.ChoosingTeam = list;
return new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { result = "error" }
};
}
如果需要的话,我可以通过html的形式来完成Ajax的动作。
如果您使用AJAX,表格将不会自动清除,您需要清除它。您可以将输入文本和文本区域的值设置为 ''
。此外,您需要重置 selects 的值。
假设表单 id 是 CreatePlayer
然后将输入文本和文本区域的值设置为空白 (''
) -
$('#CreatePlayer').find("input[type=text], textarea").val('');
同样,您可以将select的值设置为您选择的默认值。假设第一个选项要重置的select,select的id是teamSel
,那么要重置的值-
$("#teamSel").val($("#teamSel option:first").val());
如果您在表单中添加了重置按钮,您可以触发重置,但不会将默认值设置为表单输入。触发重置 -
$("#CreatePlayer").trigger('reset');
__更新___
您应该在 OnSuccess
and/or OnFailure
中调用这些(取决于您的要求)。
当 AJAX 调用 returns 成功时,您应该清除表格。也就是说,在 OnSuccess
中清除表格。
如果调用 OnFailure
,您应该会显示错误。
我使用 Ajax.BeginForm
@using (Ajax.BeginForm("CreatePlayer", "Admin", null, new AjaxOptions() { HttpMethod = "post" }))
{
<div class="row">
<div class="col-md-6">
<div class="text-style-roboto form-group">
<label>Имя</label>
@Html.TextBoxFor(x => x.Name, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Name)
</div>
<div class="form-group">
<button type="submit" class="button button-create">Добавить</button>
</div>
</div>
</div>
}
当我按下创建新播放器的按钮时,会创建一个播放器,但表格会保持填充状态。
期望的行为是应该清除表单,但事实并非如此。我不知道如何使用 jQuery 清除表格。我应该刷新页面,还是其他方式。
我在控制器中的 post 操作是 -
[HttpPost]
public JsonResult CreatePlayer(CreatePlayerModel model, string TeamNameId)
{
if (ModelState.IsValid)
{
if (TeamNameId != string.Empty)
{
try
{
int newTeamId = int.Parse(TeamNameId);
repository.CreatePlayer(model, newTeamId);
TempData["message"] = string.Format("Игрок {0} {1} сохранены", model.Name, model.Surname);
return new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { result = "success" }
};
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
}
}
}
IEnumerable<SelectListItem> list = new SelectList(repository.Teams, "Id ", "Name");
ViewBag.ChoosingTeam = list;
return new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { result = "error" }
};
}
如果需要的话,我可以通过html的形式来完成Ajax的动作。
如果您使用AJAX,表格将不会自动清除,您需要清除它。您可以将输入文本和文本区域的值设置为 ''
。此外,您需要重置 selects 的值。
假设表单 id 是 CreatePlayer
然后将输入文本和文本区域的值设置为空白 (''
) -
$('#CreatePlayer').find("input[type=text], textarea").val('');
同样,您可以将select的值设置为您选择的默认值。假设第一个选项要重置的select,select的id是teamSel
,那么要重置的值-
$("#teamSel").val($("#teamSel option:first").val());
如果您在表单中添加了重置按钮,您可以触发重置,但不会将默认值设置为表单输入。触发重置 -
$("#CreatePlayer").trigger('reset');
__更新___
您应该在 OnSuccess
and/or OnFailure
中调用这些(取决于您的要求)。
当 AJAX 调用 returns 成功时,您应该清除表格。也就是说,在 OnSuccess
中清除表格。
如果调用 OnFailure
,您应该会显示错误。