漫长的一天,我仍然在这一张桌子上殴打我的头。我想我已经在堆栈溢出以及大多数jQuery UI文档上阅读了每个jQuery UI自动完整的帖子。
问题:
我在ASP.NET MVC 4应用程序中具有表格。该表格用于提交时间表/工作票。用户选择一个项目,并基于该项目,启用了工作订单号的自动完成字段。如果用户为该项目选择和现有的工作订单号,我将填充两个其他输入,其中包含有关工作订单的信息。我需要允许用户输入一个全新的工作订单,而无需选择自动完成建议的工作单,并且仍然具有表单验证。问题在于,如果我不从自动完成中选择建议,则验证会失败。
jQuery-UI文档确实表明该方法可用于使用,但我并没有找到一个很好的示例,说明如何使用它们,实际上最好在我的情况下使用它们。另外,可能值得注意的是,我正在使用jQuery-ui 1.9
我遇到的错误:
system.data.entity.validation.dbentityValidationException:一个或多个实体的验证失败。有关更多详细信息,请参见" EntityValidationErrors"属性。
错误指向我的控制器上的代码线,我在其中调用_db.savechanges();
if ( ModelState.IsValid )
{
_db.WorkTickets.Add(workticket);
_db.SaveChanges();
}
模型状态是有效的,我没有试图保存的零值。我的模型确实允许在几个字段上进行零,但是在这种情况下,所有字段均已完成。
如果我从自动填充小部件中选择现有的工作单,或者我将其留为空白,则表格效果很好。仅当我输入新的工作顺序时,它才会失败。我已经设置了一个断点,并验证了该模型确实具有我为工作票键入的值。Wonumber在调用保存更改之前。
这是我的jQuery。
$(document).ready(function () {
$("#ProjectID").change(function () {
var id = $(this).val();
var results = "result";
var source1 = "Project/QuickCCSearch?project=" + id;
$("#ChargeCode").autocomplete({ source: source1 });
$("#ChargeCode").attr("disabled", false)
var source2 = "Project/QuickPOSearch?project=" + id;
$("#PONumber").autocomplete({ source: source2 });
$("#PONumber").attr("disabled", false)
var source3 = "Project/QuickWOSearch?project=" + id;
$("#WONumber").attr("disabled", false)
$("#WONumber").autocomplete({
source: function (request, response) {
$.ajax({
url: source3,
data: request,
success: function (data) {
response(data);
if (data.length === 0) {
$("#WONumber").attr("check", false);
}
}
});
},
change: function () {
if ($("#WONumber").attr("check") != false) {
$.getJSON("Project/JobLocation", { wo: $("#WONumber").val() },
function (data) {
$("#JobLocation").val(data);
});
$.getJSON("Project/JobDescription", { wo: $("#WONumber").val() },
function (data) {
$("#JobDescription").val(data);
});
}
}
});
$.getJSON("WorkTicket/GetClient/", { id: id },
function (data) {
$("#Client").html(data);
});
$.getJSON("WorkTicket/GetClientRep/", { id: id },
function (data) {
$("#ClientRep").html(data);
});
$.getJSON("WorkTicket/GetManager/", { id: id },
function (data) {
$("#Manager").html(data);
});
});
})
编辑:这是我的html
@model WorkTicket
@{
ViewBag.Title = "Create";
}
<article>
<div class="linearBg1">
Create Daily Work Ticket
</div>
<br />
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<div class="linearBg1">
General Information
</div>
<div class="section-span-body">
<table>
<tr class="empTableRowBody2">
<th class="empTableRowBody2">
@Html.LabelFor(Model => Model.DateWorked)
</th>
<th class="empTableRowBody2" colspan="2">
@Html.LabelFor(Model => Model.ProjectName)
</th>
</tr>
<tr>
<td>
@Html.EditorFor(Model => Model.DateWorked)
</td>
<td colspan="2">
@Html.DropDownList("ProjectID")
</td>
</tr>
<tr class="empTableRowBody2">
<th class="empTableRowBody2">
Client
</th>
<th class="empTableRowBody2">
Client Rep
</th>
<th class="empTableRowBody2">
Manager
</th>
</tr>
<tr>
<td>
<div id="Client"></div>
</td>
<td>
<div id="ClientRep"></div>
</td>
<td>
<div id="Manager"></div>
</td>
</tr>
<tr class="empTableRowBody2">
<th class="empTableRowBody2">
Charge Code
</th>
<th class="empTableRowBody2">
PO Number
</th>
<th class="empTableRowBody2">
Work Order
</th>
</tr>
<tr>
<td>
@Html.TextBoxFor(Model => Model.ChargeCode, new { disabled = true })
</td>
<td>
@Html.TextBoxFor(Model => Model.PONumber, new { disabled = true })
</td>
<td>
@Html.TextBoxFor(Model => Model.WONumber, new { disabled = true, check = true })
</td>
</tr>
<tr class="empTableRowBody2">
<th class="empTableRowBody2" colspan="3">
Job Location
</th>
</tr>
<tr>
<td colspan="3">
@Html.TextBoxFor(Model => Model.JobLocation, new { @class = "inputWidth500" })
</td>
</tr>
<tr class="empTableRowBody2">
<th class="empTableRowBody2" colspan="3">
Job Description
</th>
</tr>
<tr>
<td colspan="3">
@Html.TextBoxFor(Model => Model.JobDescription, new { @class = "inputWidth500" })
</td>
</tr>
</table>
</div>
<div class="section-span-footer"></div>
<br />
<div>
<input type="submit" value="Next" />
</div>
}
</article>
@section Menu{
@Html.Partial("_MainMenu")
@Html.Partial("_MenuFooter")
}
@section scripts{
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/Scripts/WorkTicket.js")
}
我敢肯定,我做错了很多事情,因为我是新手,但仍在学习。如果用户没有从自动完成的小部件中选择一个选项,或者小部件的结果是null,是否可以禁用自动完成?预先感谢您!
t。
好吧,我终于解决了它。它与自动完成无关。只是说明我需要了解多少有关jQuery的知识。我的控制器中的代码线很差,在那里我将有关新的工作订单的信息保存回该项目。我缺少一个必需的物品,而我刚刚结束了它。很抱歉成为一个白痴,对jQuery一无所知。谢谢任何人看的人。简直不敢相信我花了很长时间才看到....