Я пытаюсь изменить значение, уже присутствующее в таблице.Когда я нажимаю кнопку редактирования рядом со строкой записи, я хочу, чтобы значения в исходных значениях присутствовали в полях ввода в форме, а когда я что-то изменяю, оно должно быть отредактировано, иначе оно останется прежним.Теперь это работает, за исключением того, что дата передает нулевой бэкэнд-контроллер.Я проверил в отладчике.
Просмотр:
<div class="col-sm-12">
<div class="form-group">
<label class="col-sm-3 control-label" for="name">Date Of Birth </label>
<div class="col-sm-9">
<input type="text" id="dob" maxlength="30" ng-model="userAccount.dateOfBirth" class="form-control datepicker required" required>
</div>
</div>
</div>
Angular.js:
$scope.UserSave = function () {
debugger
$scope.userAccount.dateOfBirth = $('#dob').val();
$scope.userAccount.CountryID = $('#countryoptions').val();
Post("/User/Change", $scope.userAccount, false, $("#btnSave")).then(function (d) {
if (d.Success) {
window.location.href = "/User/LoggedIn";
}
ShowMessage(d);
});
}
Generic.cs:
function Post(url, data, isBlockUI, e) {
BlockUI(isBlockUI, e);
return $.ajax({
method: "Post",
url: url,
// contentType: 'application/json',
data: data,//JSON.stringify(data),
success: function (d) {
UnBlockUI(e);
if ($.type(d) == "string" && d == "")
LogOutNotification()
else if ($.type(d) == "string")
AccessDenied();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
UnBlockUI(e);
ErrorMessage(errorMsg);
}
});
}
Я сделал отдельную функцию для обработки отправки и получения данных из бэкэнда, как показано выше, и я знаю, что она работает нормально, потому чтоЯ добавляю данные в базу данных, используя ее.
Но теперь приходит моя проблема.Эти данные передаются контроллеру, и переданные данные в порядке, кроме даты.Дата нулевая, и я понятия не имею, почему.Поскольку при вводе данных в поле даты установлено значение не равное нулю, это дает мне исключение.
контроллер:
public JsonResult Change(Account account) {
return Json((new userLogic()).Change(account), JsonRequestBehavior.AllowGet);
}
здесь при отладке я проверяюзначение атрибута account.dateofbirth и его значение 1/1/0001, которое, насколько я знаю, равно нулю в формате даты.поэтому я получаю сообщение об ошибке при попытке сохранить в БД.
Логика:
public Message Change(Account account) {
Message msg = new Message();
try
{
Account userProfile = db.Accounts.Where(b => b.Email == account.Email).FirstOrDefault();
var dob = account.dateOfBirth;
if (userProfile == null)
{
msg.Success = false;
msg.MessageDetail = "somehting went wrong could not find the data entry amke sure the database connection is working";
}
else {
userProfile.firstName = account.firstName;
userProfile.lastName = account.lastName;
userProfile.Email = account.Email;
userProfile.password = account.password;
userProfile.CountryID = account.CountryID;
userProfile.dateOfBirth = account.dateOfBirth;
userProfile.phoneNo = account.phoneNo;
db.Entry(userProfile).State = EntityState.Modified;
db.SaveChanges();
msg.Success = true;
msg.MessageDetail = "Edit successful";
}
}
catch (Exception ex) {
msg.Success = false;
msg.MessageDetail = "somehting went wrong could not find the data entry make sure the database connection is working";
}
return msg;
}
Я знаю, что проблема где-то, когда я отправляю данные объектак контроллеру.Но я, похоже, не могу найти свою ошибку. Я добавляю данные аналогичным образом, просто меняя логику в бэкэнде, и это, кажется, работает нормально.
Данные из вкладки Сеть браузера, показывающие, что отправляется в AJAXзапрос:
Кодированный URL:
IsPermissionUpdated: false
UserId: 12
password: 88888888
firstName: Ali
lastName: Shujaat
Email: Ali%40gmail.com
CountryID: 6
phoneNo: 3244183346
dateOfBirth: 28%2F08%2F2018
isActive: true
Country:
Password: 97533284
Декодированный URL:
IsPermissionUpdated: false
UserId: 12
password: 88888888
firstName: Ali
lastName: Shujaat
Email: Ali@gmail.com
CountryID: 6
phoneNo: 3244183346
dateOfBirth: 28/08/2018
isActive: true
Country:
Password: 97533284
Код для добавления данных: Поскольку я использую точно такой жеметод, и он отлично работает.
Вид:
<div class="col-sm-12">
<div class="form-group">
<label class="col-sm-3 control-label" for="name">Date Of Birth </label>
<div class="col-sm-9">
<input type="text" id="dob" maxlength="30" ng-model="userAccount.dateOfBirth" class="form-control datepicker required" required>
</div>
</div>
</div>
Угловой:
$scope.UserSave = function () {
$scope.userAccount.dateOfBirth = $('#dob').val();
$scope.userAccount.CountryID = $('#countryoptions').val();
Post("/User/Save", $scope.userAccount , false, $("#btnSave")).then(function (d) {
if (d.Success) {
}
ShowMessage(d);
});
}
Контроллер:
public JsonResult Save(Account account) {
return Json((new userLogic()).Save(account), JsonRequestBehavior.AllowGet);
}
Logic.cs:
public Message Save(Account account)
{
Message msg = new Message();
// Account userProfile = Static.UserProfile;
try
{
Account foundaccount = db.Accounts.SingleOrDefault(x => x.Email == account.Email);
if (foundaccount != null)
{
msg.Success = false;
msg.MessageDetail = "Email already exist.";
}
else
{
Country c1 = db.Countries.Find(account.CountryID);
Account newaccount = new Account();
//newaccount.UserId = account.UserId;
newaccount.firstName = account.firstName;
newaccount.lastName = account.lastName;
newaccount.Email = account.Email;
newaccount.password = account.password;
newaccount.phoneNo = account.phoneNo;
newaccount.dateOfBirth = account.dateOfBirth;
newaccount.CountryID = account.CountryID;
newaccount.isActive = true;
//newaccount.Country = c1;
db.Accounts.Add(newaccount);
//db.Entry(newaccount).State = EntityState.Added;
db.SaveChanges();
msg.MessageDetail = account.Email + "has been saved";
}
//userProfile.LogActivity("Save", msg.MessageDetail, "EmploymentType");
}
catch (Exception ex)
{
msg.Success = false;
msg.MessageDetail = Message.ErrorMessage;
// userProfile.LogError(ex, "BLL/EmploymentTypeLogic/Save");
}
return msg;
}
}
Исключение, которое я получаю:
Message = "The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated."