【发布时间】:2015-04-17 19:14:32
【问题描述】:
我在这里有一个“YogaSpaceOverview”类,它的标题属性具有必需的属性。 我的问题! 当我传入一个空白“”的标题时,什么也没有发生,它不会被保存到数据库中,但不会像它应该的那样从“[required]”属性中抛出错误或异常。 注意 - 没有表单提交,我在 jquery .post 中做所有事情。如果有值并且如果没有抛出错误消息并且不保存到数据库,我唯一的选择是检查 jquery 吗?我在这里有什么选择?我认为使用 asp mvc 进行服务器端和客户端验证会有更多选择!
public class YogaSpaceOverview
{
[Required]
[MaxLength(35, ErrorMessage = "Title cannot be greater then 35 characters.")]
public string Title { get; set; }
//other members left out for space saving
}
我有一个允许您编辑标题的页面,但没有表单提交,保存是通过如下所示的 jQuery .change() 事件进行的。
$('#Overview_Title').change(function() {
var id = $(this).data('id');
var url = $(this).data('url');
var title = $(this).val();
$.post(url, {
ID: id,
Title: title
}, function(data) {
// do something with the returned value e.g. display a message?
// // for example - if(data) { // OK } else { // Oops }
//alert("success");
$("#successmessage").show().delay(5000).fadeOut();
})
.fail(function() {
alert("error");
});
});
<div id="overview">
<div class="form-group">
@Html.LabelFor(model => model.Overview.Title, new { @class = "control-label" }) @Html.EditorFor(model => model.Overview.Title, new { htmlAttributes = new { @class = "form-control", data_id = Model.YogaSpaceId, data_url = Url.Action("UpdateTitle", "ManageSpaces")
} }) @Html.ValidationMessageFor(model => model.Overview.Title, "", new { @class = "text-danger" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.Overview.Summary, new { @class = "control-label" }) @Html.EditorFor(model => model.Overview.Summary, new { htmlAttributes = new { @class = "form-control", data_id = Model.YogaSpaceId, data_url = Url.Action("UpdateSummary",
"ManageSpaces") } }) @Html.ValidationMessageFor(model => model.Overview.Summary, "", new { @class = "text-danger" })
</div>
</div>
在 C# 中更新标题如下所示
[HttpPost]
public ActionResult UpdateTitle(int id, string title)
{
//update database
YogaSpace yogaSpace = yogaSpaceRepository.Find(id);
yogaSpace.Overview.Title = title;
yogaSpaceRepository.InsertOrUpdate(yogaSpace);
yogaSpaceRepository.Save();
return Json(true); // don't return view because it gets refreshed
}
我可以获得瑜伽空间并将其传递给 insertorupdate,如下所示。
public void InsertOrUpdate(YogaSpace yogaSpace)
{
if (yogaSpace.YogaSpaceId == default(int))
{
context.Entry(yogaSpace).State = System.Data.Entity.EntityState.Added;
}
else
{
context.Entry(yogaSpace).State = System.Data.Entity.EntityState.Modified;
}
}
【问题讨论】:
标签: javascript c# jquery asp.net-mvc client-side-validation