我想通过执行一些ajax调用而不刷新页面来将数据库中的enumdropdownlist的值从active更改为inactive ?我该怎么做呢?javascript方法还是ajax.beginform?不确定这里...
我尝试了ajax.beginform,并且该调用获得了对控制器的确定,但随后它尝试通过将其作为操作结果返回来刷新/渲染视图。我不希望它刷新视图,因为我丢失了ViewModel数据。我以为ajax.beginform仅刷新了表单内部的内容?我需要用javascript方法执行此操作吗?如何防止在操作方法中刷新/渲染视图?
这是我的ajax表格。如果返回视图,则会丢失所有“模型”视图数据,因此model.statusenabled为null!我不明白为什么它为null,因为它在ajaxform之外...
@if (Model.StatusEnabled)
{
using (Ajax.BeginForm("UpdateStatus", "Student", new AjaxOptions
{
HttpMethod = "post",
OnSuccess = "dotcolor();"
}))
{
@Html.EnumDropDownListFor(model => model.Status, new { @class = "btn btn-default btn-lg dropdown-toggle", onchange = "this.form.submit();", id = "enumstatus" })
}
}
else
{
@Html.EnumDropDownListFor(model => model.Status, new { @class = "btn btn-default btn-lg dropdown-toggle", disabled = "disabled" })
}
这是我的行动方法
[HttpPost]
public ActionResult UpdateStatus()
{
//update database
// don't return view because it gets refreshed
// and I have to re pass in my viewmodel
return View("Edit");
}
如果我在UpdateStatus()中将返回类型更改为void,它仍然尝试返回一个称为UpdateStatus的视图。不是我想要的
使用jquery和ajax发布所选值相对容易
Html
@Html.EnumDropDownListFor(m => m.Status, new { @class = "btn btn-default btn-lg dropdown-toggle" })
脚本
var id = '@Model.ID'; // store the ID of the student (change to suit your property name)
var url = '@Url.Action("UpdateStatus", "Student")';
$('#Status').change(function() {
var status = $(this).val();
$.post(url, { ID: id, Status: status }, function(data) {
// do something with the returned value e.g. display a message?
// for example - if(data) { // OK } else { // Oops }
}
}
控制器
[HttpPost]
public ActionResult UpdateStatus(int ID, EmployeeStatus Status) // assumes the enum is typeof EmployeeStatus
{
// update the employees status based on the parameters
return Json(true); // or return Json("some message")
}
请注意,您可能需要检查状态是否确实已更新,例如,在可能return Json(null)
或return Json("some error message")
随后可用于在页面上显示消息的catch块中
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句