【发布时间】:2018-10-15 18:32:36
【问题描述】:
我有问题。
无论我做什么,我的复选框值总是错误的。
我用这个模型
public class ActEntry : BaseEntity
{
[Required]
public int DepartmentId { get; set; }
[Required]
[Display(Name = "Тип")]
public EnergyType EnergyType { get; set; }
[Required]
[Display(Name = "Имя объекта установки")]
public string Name { get; set; }
[Required]
[Display(Name = "Позиция")]
public string Postition { get; set; }
[Required]
[Display(Name = "Проектная")]
public bool HasDoc1 { get; set; }
[Required]
[Display(Name = "Исполнительная")]
public bool HasDoc2 { get; set; }
[Required]
[Display(Name = "Статус")]
public State State { get; set; }
[Display(Name = "Дата сдачи")]
public DateTime? DateOfCommit { get; set; }
[Required]
[Display(Name = "Акт допуска")]
public string Act { get; set; }
[Required]
[Display(Name = "Год акта")]
public int Year { get; set; }
}
我的表格:
<div class="modal fade" id="editRow">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h2 class="modal-title" id="modalTitle"></h2>
</div>
<div class="modal-body">
<form class="form-horizontal" method="post" id="detailsForm">
<input type="hidden" id="Id" name="Id">
<input type="hidden" id="DepartmentId" name="DepartmentId" value="@Model.DepartmentId">
<input type="hidden" id="EnergyType" name="EnergyType" value="@Model.EnergyType">
<div class="form-group">
<label for="Name" class="control-label col-xs-3">Имя объекта установки</label>
<div class="col-xs-9">
<input class="form-control" id="Name" name="Name">
</div>
</div>
<div class="form-group">
<label for="Postition" class="control-label col-xs-3">Позиция</label>
<div class="col-xs-9">
<input type="text" class="form-control" id="Postition" name="Postition">
</div>
</div>
<div class="form-group">
<label for="Postition" class="control-label col-xs-3">Наличие документации</label>
<div class="col-xs-9">
<label class="checkbox-inline">
<input type="checkbox" name="HasDoc1" value="true">Проектная</label>
<label class="checkbox-inline">
<input type="checkbox" name="HasDoc2" value="true">Исполнительная</label>
</div>
</div>
<div class="form-group">
<label for="Act" class="control-label col-xs-3">Акт допуска</label>
<div class="col-xs-9">
<input type="text" class="form-control" id="Act" name="Act">
</div>
</div>
<div class="form-group">
<label for="Year" class="control-label col-xs-3">Год акта</label>
<div class="col-xs-9">
<input type="text" class="form-control" id="Year" name="Year">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-3"></label>
<div class="col-xs-9">
<button class="btn btn-primary" type="button" onclick="save()">Сохранить</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
这里是这些复选框:
<label class="checkbox-inline">
<input type="checkbox" name="HasDoc1" value="true">
<input type="hidden" name="HasDoc1" value="false">Проектная</label>
<label class="checkbox-inline">
<input type="checkbox" name="HasDoc2" value="true">
<input type="hidden" name="HasDoc2" value="false">Исполнительная</label>
我的 ajax 脚本:
function save() {
if (!$('#detailsForm').valid()) return false;
$.ajax({
type: "POST",
url: "/Ajax/CreateOrUpdate/",
data: $('#detailsForm').serialize(),
success: function() {
$('#editRow').modal('hide');
updateTable();
successNoty('Успешно сохранено')
}
});
};
当我看到序列化的值时,我注意到HasDoc2 和HasDoc1 是假的。如果我在 Chrome 中检查它们并使用 $('#HasDoc1').val() 和 $('#HasDoc2').val() 测试它们,我总是会出错。
当我将它们的名称更改为 hasDoc1 和 hasDoc2 时,当我检查它们时,我突然变得想要。我做错了什么?
在 ASP MVC 中复选框属性命名是否有特殊规则? 我试过用 Helpers,结果是一样的。
【问题讨论】:
-
使用
HtmlHelper方法正确生成表单控件(用于复选框 -@Html.CheckBoxFor(m => m.yourProperty)) - 您的手动 html 有value="false"和表单回发其表单的名称/值对控件,所以它总是发布false(它不会回发“检查”状态) -
@StephenMuecke 如果我明确指定它,为什么它有“假”值?有什么方法可以手动完成吗?
-
你命名的复选框。未指定 ID。在 Jquery 或 Chrome 中,您尝试通过 id $('#HasDoc1').val() 访问它。所以 hasDoc1 可能是 Razor 引擎生成的 id。请检查。
-
您到底为什么要手动执行此操作 - 不仅您编写的代码量是 2-3 倍,而且您没有获得 2-way 模型绑定或任何客户端验证等。使用
@Html.CheckBoxFor(),它将生成正确的html,并在您提交时正确绑定(使用普通提交和使用带有.serialize()的ajax。并使用TextBoxFor()生成您<input type="text" ... /> -
你为什么接受一个可怕的使用 javascript 的黑客攻击。您需要访问 MVC 站点并通过教程学习 MVC 的基础知识。
标签: javascript jquery asp.net asp.net-mvc