我有一个简单的mvc项目,由一个名为Persons的表组成,该表有一些属性,如name,age,surname等。
我最近在table中添加了一个属性,它在SQL中是bit
的类型,在C#中是bool
,对我来说它代表了一些状态。如果没问题,我将该状态设置为true或false。
在一个控制器中,我在数据库中创建了我的人员的索引视图,并将状态显示为复选框。那工作正常。我想要做的是更改状态,如果我单击该复选框而不是使用所有属性的编辑视图。 我只想将复选框值从索引视图保存到数据库。
有些人建议我在我的控制器中创建一个动作,如下所示:
public ActionResult Save(int id, bool status){}
我的人员id
id
的位置status
是我点击的checkbox
的值。
那么如何用jquery,ajax或javascript调用该函数并发送这些参数? 我对ajax并不是很好,有点害怕它:)
还有一件事我只能通过这种方式从我的数据库中显示复选框值:
@Html.CheckBox("somename", item.Status)
<input name="somename" type="hidden" value="false"/>
任何帮助或建议或指导我的方向都很好!
答案 0 :(得分:2)
您有几种选择。一种方法是将复选框放在(普通)表单中,然后使用jQuery Form plugin对表单进行Ajax化:
@using(Html.BeginForm()) {
@Html.Checkbox(...)
}
<script type="text/javascript">
$(document).ready(function () {
$('form').ajaxForm({
success: Saved,
error: HandleError
});
});
function Error(response, status, err) {
// code to handle error here
}
function Saved(responseText, statusText, xhr, $form) {
// code to handle succes, if any
}
</script>
当然,您也可以使用@Ajax.BeginForm
,但这样做的好处是可以轻松降级。只需删除jQuery表单初始化,你就可以获得一个常规表单:)
另一种可能性是简单地使用@Ajax.ActionLink
。我写了blog post on how to deal with Ajax.ActionLink
,我认为会帮助你。
您问题上的控制器操作签名看起来是正确的:
public ActionResult Save(int id, bool status){}
其他选项实际上是创建一个Settings
视图模型(称之为你想要的),并且在那里只有一堆bool
属性来表示复选框:
public class Settings
{
public bool Status { get; set; }
// more properties here
}
然后您可以将您的操作绑定到Settings对象:
public ActionResult Save(int id, Settings settings){}
如果您最终有多个要绑定的复选框,这将派上用场。