Почему я получаю system.data.entity.validation.dbentityvalidationexception: по функции post
I have a problem by saving my data from, in jQuery generated table, to database. somehow is the length of my sting to long as I understand, somebody knows how can I fix it, without editing database properties, like delete empty spaces or something?
Что я уже пробовал:
My jQuery:
$(document).ready(function () { loadWeekData(); }); function loadWeekData() { // Append database data here $.ajax({ type: "GET", url: "/Home/JsonWeekEvents", dataType: "JSON", success: function (result) { $.each(result, function (i, val) { var trow = $('<tr/>').data("id", val.Id); //trow.append('<td>' + val.Id + " " + '</td>'); trow.append('<td style="padding:5px; width:100px; height:70px"></td>'); trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' + '<div class="ui-widget">' + '<input size="10" maxlength="10" id="tagsM" class="tags" />' + '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' + '<div style="text-align:center" id="monVal" class="desc_NumM">' + val.Monday + '</div >' + '<input type="hidden" class="idEvent" />' + '</div >' + '</td>'); trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' + '<div class="ui-widget">' + '<input size="10" maxlength="10" id="tagsT" class="tags" />' + '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' + '<div style="text-align:center" id="tueVal" class="desc_NumT">' + val.Tuesday + '</div >' + '<input type="hidden" class="idEvent" />' + '</div >' + '</td>'); trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' + '<div class="ui-widget">' + '<input size="10" maxlength="10" id="tagsW" class="tags" />' + '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' + '<div style="text-align:center" id="wedVal" class="desc_NumW">' + val.Wednesday + '</div >' + '<input type="hidden" class="idEvent" />' + '</div >' + '</td>'); trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' + '<div class="ui-widget">' + '<input size="10" maxlength="10" id="tagsTr" class="tags" />' + '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' + '<div style="text-align:center" id="thurVal" class="desc_NumTr">' + val.Thursday + '</div >' + '<input type="hidden" class="idEvent" />' + '</div >' + '</td>'); trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' + '<div class="ui-widget">' + '<input size="10" maxlength="10" id="tagsFr" class="tags" />' + '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' + '<div style="text-align:center" id="friVal" class="desc_NumF">' + val.Friday + '</div >' + '<input type="hidden" class="idEvent" />' + '</div >' + '</td>'); trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' + '<div class="ui-widget">' + '<input size="10" maxlength="10" id="tagsSt" class="tags" />' + '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' + '<div style="text-align:center" id="satVal" class="desc_NumSa">' + val.Saturday + '</div >' + '<input type="hidden" class="idEvent" />' + '</div >' + '</td>'); trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' + '<div class="ui-widget">' + '<input size="10" maxlength="10" id="tagsSu" class="tags" />' + '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' + '<div style="text-align:center" id="sunVal" class="desc_NumSu">' + val.Sunday + '</div >' + '<input type="hidden" class="idEvent" />' + '</div >' + '</td>'); trow.append('<td style="padding:2px; width:100px; height:70px"><a href="#" rel="events-week-edit" class="edit">Edit Week</a></td>'); tab.append(trow); }); $("tr:odd", tab).css('background-color', '#C4C4C4'); $("#weekEvents").html(tab); }, error: function () { alert("Failed! Please try again."); } }); var tab = $('<table class=MyTable border=1 ></table>'); var thead = $('<thead></thead>'); thead.append('<th style="padding:5px">FSE' + " " + '</th>'); thead.append('<th style="padding:5px">Monday' + " " + '</th>'); thead.append('<th style="padding:5px">Tuesday' + " " + '</th>'); thead.append('<th style="padding:5px">Wednesday' + " " + '</th>'); thead.append('<th style="padding:5px">Thursday' + " " + '</th>'); thead.append('<th style="padding:5px">Friday' + " " + '</th>'); thead.append('<th style="padding:5px">Saturday' + " " + '</th>'); thead.append('<th style="padding:5px">Sunday' + " " + '</th>'); tab.append(thead); tab.on("focus", ".tags", function (e) { //var prefix = $('.tags').val(); $(this).autocomplete({ source: function (request, response) { $.ajax({ url: "/Home/GetSearchValue", dataType: "json", data: { search: request.term }, success: function (data) { response($.map(data, function (item) { return { label: item.Title + ', ' + item.Description, value: item.Title, Id: item.Id, Title: item.Title, Description: item.Description, Location: item.Location } })); }, error: function (xhr, status, error) { alert("Error!" + xhr); } }); }, select: function (event, ui) { var field_id = $(this).closest("div").find(".idEvent"); field_id.val(ui.item.Id); } }); }); tab.on("click", ".addEvent", function (e) { var id = $(this).closest("div").find(".idEvent").val(); var field = $(this).closest("div").find(".desc_NumM"); var select = $(this).closest("div").find(".tags"); $.ajax({ type: "GET", url: "/Home/AutoEventDetails", data: { id: id }, dataType: "JSON", success: function (data) { var res = $('<p>' + data.Title + '<br/>' + data.Description + '<br/>' + data.Location + '</p>'); field.html(res); select.val(''); } }); }); tab.on("click", ".addEvent", function (e) { var id = $(this).closest("div").find(".idEvent").val(); var field = $(this).closest("div").find(".desc_NumT"); var select = $(this).closest("div").find(".tags"); $.ajax({ type: "GET", url: "/Home/AutoEventDetails", data: { id: id }, dataType: "JSON", success: function (data) { var res = $('<p>' + data.Title + '<br/>' + data.Description + '<br/>' + data.Location + '</p>'); field.html(res); select.val(''); } }); }); tab.on("click", ".addEvent", function (e) { var id = $(this).closest("div").find(".idEvent").val(); var field = $(this).closest("div").find(".desc_NumW"); var select = $(this).closest("div").find(".tags"); $.ajax({ type: "GET", url: "/Home/AutoEventDetails", data: { id: id }, dataType: "JSON", success: function (data) { var res = $('<p>' + data.Title + '<br/>' + data.Description + '<br/>' + data.Location + '</p>'); field.html(res); select.val(''); } }); }); tab.on("click", ".addEvent", function (e) { var id = $(this).closest("div").find(".idEvent").val(); var field = $(this).closest("div").find(".desc_NumTr"); var select = $(this).closest("div").find(".tags"); $.ajax({ type: "GET", url: "/Home/AutoEventDetails", data: { id: id }, dataType: "JSON", success: function (data) { var res = $('<p>' + data.Title + '<br/>' + data.Description + '<br/>' + data.Location + '</p>'); field.html(res); select.val(''); } }); }); tab.on("click", ".addEvent", function (e) { var id = $(this).closest("div").find(".idEvent").val(); var field = $(this).closest("div").find(".desc_NumF"); var select = $(this).closest("div").find(".tags"); $.ajax({ type: "GET", url: "/Home/AutoEventDetails", data: { id: id }, dataType: "JSON", success: function (data) { var res = $('<p>' + data.Title + '<br/>' + data.Description + '<br/>' + data.Location + '</p>'); field.html(res); select.val(''); } }); }); tab.on("click", ".addEvent", function (e) { var id = $(this).closest("div").find(".idEvent").val(); var field = $(this).closest("div").find(".desc_NumSa"); var select = $(this).closest("div").find(".tags"); $.ajax({ type: "GET", url: "/Home/AutoEventDetails", data: { id: id }, dataType: "JSON", success: function (data) { var res = $('<p>' + data.Title + '<br/>' + data.Description + '<br/>' + data.Location + '</p>'); field.html(res); select.val(''); } }); }); tab.on("click", ".addEvent", function (e) { var id = $(this).closest("div").find(".idEvent").val(); var field = $(this).closest("div").find(".desc_NumSu"); var select = $(this).closest("div").find(".tags"); $.ajax({ type: "GET", url: "/Home/AutoEventDetails", data: { id: id }, dataType: "JSON", success: function (data) { var res = $('<p>' + data.Title + '<br/>' + data.Description + '<br/>' + data.Location + '</p>'); field.html(res); select.val(''); } }); }); tab.on("click", ".edit", function (e) { var tr = $(this).closest("tr"); var id = tr.data("id"); //var divM = $(this).closest("div").find("#monVal"); var field = $(this).closest("tr").find(".ui-widget"); var mon = field.find(".desc_NumM"); var tue = field.find(".desc_NumT"); var wed = field.find(".desc_NumW"); var thur = field.find(".desc_NumTr"); var fri = field.find(".desc_NumF"); var sat = field.find(".desc_NumSa"); var sun = field.find(".desc_NumSu"); var monVal = mon.text(); var tueVal = tue.text(); var wedVal = wed.text(); var thurVal = thur.text(); var friVal = fri.text(); var satrVal = sat.text(); var sunVal = sun.text(); //var res = field.text(); $.ajax({ type: "POST", url: "/Home/UpdateWeek", data: { id: id, Monday: monVal, Tuesday: tueVal, Wednesday: wedVal, Thursday: thurVal, Friday: friVal, Saturday: satrVal, Sunday: sunVal }, dataType: "JSON", success: function (data) { alert("Week " + id + " changed!"); $('#weekEvents').load(loadWeekData()); }, error: function () { alert("Failed, try again"); } }); }); }
My controller:
[HttpPost] public JsonResult UpdateWeek(int id, EventsWeek w) { using (WeekEventsDBEntities db = new WeekEventsDBEntities()) { EventsWeek ewupt = db.EventsWeeks.Where(x => x.Id == id).FirstOrDefault(); ewupt.Monday = w.Monday; ewupt.Tuesday = w.Tuesday; ewupt.Wednesday = w.Wednesday; ewupt.Thursday = w.Thursday; ewupt.Friday = w.Friday; ewupt.Saturday = w.Saturday; ewupt.Sunday = w.Sunday; db.SaveChanges(); } return Json(true, JsonRequestBehavior.AllowGet); }
My model (I'm using Entity Framework):
namespace WebApplication2.Models { public partial class EventsWeek { public int Id { get; set; } public string Monday { get; set; } public string Tuesday { get; set; } public string Wednesday { get; set; } public string Thursday { get; set; } public string Friday { get; set; } public string Saturday { get; set; } public string Sunday { get; set; } } }
All properties have nvchar(100)
After clicking on "Edit Week" link it goes thru and it looks good but then I get an error in the controller and operation fails. If somebody can help, would be great!
F-ES Sitecore
Если вы просто хотите, чтобы данные были усечены, то используйте string.Подстрока
ж.понедельник.Подстрока(0, 100)
Это займет первые 100 символов w.Monday, но, честно говоря, похоже, что ваши проблемы находятся в другом месте, и это всего лишь повязка на зияющую рану :) Если вы можете жить только с 100 символами, то каковы другие символы, откуда они берутся, и если они неуместны, то почему они там?
Member 14803832
круто! это работает! но на самом деле это не решит мою проблему. дело в том, что я делаю автозаполнение из одной таблицы и вставляю данные в другую таблицу в своей базе данных. я думаю, что моя первая таблица слишком велика, у меня есть там 3 свойства С 300 символами вместе, и я пытаюсь протолкнуть 300 символов в 100 :)
Richard Deeming
Итак, вы пытаетесь хранить несколько значений в одном столбце одной строки? Это плохой дизайн базы данных.
Я бы разделил это на два стола - EventsWeeek
, который будет содержать идентификатор и, возможно, дату начала; и EventsWeekEvent
который будет содержать свой собственный идентификатор, EventsWeek
ИД, День недели[^], и подробности события. Несколько событий в один и тот же день получили бы несколько строк в EventsWeekEvent
стол.
Member 14803832
это то, что я уже сделал, иначе было бы невозможно сделать автозаполнение
Richard Deeming
Я предполагал, что данные автозаполнения поступают из третьей таблицы.
Если вы уже разделили неделю на несколько строк, почему вы пытаетесь вставить данные для нескольких событий в одну строку?
Member 14803832
У меня есть 2 таблицы вместе: Events &WeeksEvents, мое автозаполнение я делаю из таблицы Events, а затем передаю значение 3 ячеек в один div, так что из этих ячеек я получаю только одну и разделяю ее затем в таблице WeekEvents на выбранный день
Richard Deeming
Так что, как я уже сказал, вам нужно разделиться. WeekEvents
составьте таблицу таким образом, чтобы вы не пытались хранить более одного события в строке. :)
Нормализация базы данных (объяснено на простом английском языке) - Essential SQL[^]
Member 14803832
о, Вы имеете в виду показать несколько таблиц на основе значения идентификатора? Я не думал об этом... может быть, это решение...
Member 14803832
но если я отредактирую свою таблицу событий так, что все ячейки в строке предположения не будут больше, чем одна ячейка в таблице Eventsweek, то теоретически она должна проснуться, верно?
Richard Deeming
Если вы храните несколько событий в одном столбце таблицы, то EventsWeek
таблица, столбец на EventsWeek
таблица должна быть достаточно большой, чтобы хранить детали всех возможных событий вместе взятых.
Если вы разделите его на отношения "один ко многим", вам не нужно будет беспокоиться о размере столбца. Это также значительно упростит некоторые запросы - например, - когда состоится это мероприятие?" было бы чрезвычайно трудно ответить, если бы все события за день были сведены вместе в одной клетке.
Member 14803832
спасибо, это похоже на решение проблемы! попробую это сделать...