문제점에 대한 약간의 배경 - 큰 C# MVC 응용 프로그램을 상속했으며 현재 응용 프로그램의 주 프로세스를 변경하고 있습니다.MVC 업데이트 오류 : datetime2
원래 사용자는 항목을 업로드 할 것입니다. 그러나 이제 사용자는 항목을 전달할 수 있도록 확인란을 선택할 수 있습니다. 이 확인란을 선택하면 배달 테이블에 관련 세부 정보가 채워집니다. 여기
는 사용자가 원래 항목의 세부 사항을 업로드 할 때 내 항목 컨트롤러에서 POST 작업입니다 : [HttpPost]
public ActionResult AddItemDetails(Int64? itemId, Item item, FormCollection formValues)
{
if (formValues["cancelButton"] != null)
{
return RedirectToAction("Index");
}
if (formValues["backButton"] != null)
{
return RedirectToAction("AddItemStart");
}
string ImageGuid = formValues["ImageGUID"];
ViewData["Image_GUID"] = ImageGuid;
if (item.ImageID == null && String.IsNullOrEmpty(ImageGuid))
{
ModelState.AddModelError("Image", "Image is required.");
ViewData["Image"] = "Image is required.";
}
if (ModelState.IsValid)
{
item.SubmissionState = -1; // Unsubmitted;
/**********************ADDED 25/1/2011**************************/
item.ProductCode = formValues["ProductCode"];
item.Name = formValues["Name"];
string deliverySelection = formValues["deliverySelection"];
if (deliverySelection == "on")
{
item.DeliverySelection = "Yes";
Delivery c = new Delivery()
{
ProductCode = formValues["ProductCode"],
Name = formValues["Name"],
PhoneNo = formValues["PhoneNo"],
Address = formValues["Address"],
SubmissionDate = System.DateTime.Now
};
item.Delivery = c;
}
else
{
item.DeliverySelection = "No";
}
/*****************************END*******************************/
if (itemId.HasValue)
{
UpdateItemDetails(item, ImageGuid, this);
}
else
{
titleId = ItemServices.AddItem(item, ImageGuid);
}
return RedirectToAction("AddSubItemDetails", new { itemId = item.ItemID });
}
return View(item);
}
이 잘 작동하고 원하는 결과를 얻을 수있다. 그러나 항목 컨트롤러에서 업데이트 작업을 수정하는 데 조금 어려움이 있습니다. 이 약간 다릅니다과 UpdateItemDetails를 사용하는 방법
[HttpPost]
public ActionResult UpdateItemDetails(Int64 itemId, Item item, FormCollection formValues)
{
if (formValues["cancelButton"] != null)
{
return RedirectToAction("View", new { itemId = itemId });
}
string image = formValues["ImageGUID"];
ViewData["Image_GUID"] = ImageGuid;
if (item.ImageID == null && String.IsNullOrEmpty(ImageGuid))
{
ModelState.AddModelError("Image", "Image is required.");
}
if (ModelState.IsValid)
{
//**********************Added 31.01.2011****************************//
using (ModelContainer ctn = new ModelContainer())
{
string DeliverySelection = formValues["deliverySelection"];
if (deliverySelection == "on")
{
item.DeliverySelection = "Yes";
Delivery c = new Delivery()
{
ProductCode = formValues["ProductCode"],
Name = formValues["Name"],
PhoneNo = formValues["PhoneNo"],
Address = formValues["Address"],
SubmissionDate = System.DateTime.Now
};
ctn.Delierys.AddObject(c);
item.Delivery = c;
}
else
{
item.DeliverySelection = "No";
}
ctn.AddToItems(item);
ctn.SaveChanges();
UpdateItemDetails(item, ImageGuid, this);
return RedirectToAction("View", new { itemId = itemId });
}
return View("UpdateItemDetails", MasterPage, item);
}
공지 사항() 데이터베이스를 업데이트 : 여기에 지금까지 가지고있는 것입니다. 배달 데이터베이스에 삽입 할 formvalues를 수집해야하므로 여기서는 무엇을해야할지 확신이 들지 않았습니다. ,
private void UpdateItemDetails(Item item, string ImageFileGuid, ItemsController controller)
{
using (ModelContainer ctn = new ModelContainer())
{
Item existingData = ItemServices.GetCurrentUserItem(item.ItemID, ctn);
controller.UpdateModel(existingData);
existingData.UpdatedBy = UserServices.GetCurrentUSer().UserID;
existingData.UpdatedDate = DateTime.Now;
// If there is a value in this field, then the user has opted to upload
// a new cover.
//
if (!String.IsNullOrEmpty(ImageFileGuid))
{
// Create a new CoverImage object.
//
byte[] imageBytes = FileServices.GetBytesForFileGuid(Guid.Parse(ImageFileGuid));
Image newImage = new Image()
{
OriginalCLOB = imageBytes,
ThumbnailCLOB = ImageServices.CreateThumbnailFromOriginal(imageBytes),
HeaderCLOB = ImageServices.CreateHeaderFromOriginal(imageBytes),
FileName = "CoverImage"
};
existingData.Image = newImage;
}
ctn.SaveChanges();
}
}
코드로 위의 작업 나는 세부 사항을 업데이트하려고하면 다음과 같은 오류가 발생합니다 : 여기 UpdateItemDetails입니다
이 오류는 업데이트 작업에 ctn.SaveChanges()에서 발생합니다System.Data.SqlClient.SqlException: The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value. The statement has been terminated.
.
그래서 내 첫 번째 질문은 AddItemDetails 동작에 영향을 미칠 변경하지 않고이 오류를 극복하는 방법입니다. 내 두 번째 질문은 그 오류가 해결 된 경우 올바른 방법으로 업데이트 할 수 있습니까?
나는 모든 포인터에 대해 매우 감사 할 것입니다. 더 많은 정보가 필요하면 그냥 물어보십시오.
감사합니다 :)
위의 링크 된 게시물에 "날짜의 연도를 확인하십시오 - 1753 이전 인 경우 1753 년 이후로 변경해야합니다."TryUpdateModel의 요점은 각 필드에 대한 유효성 검사를 하드 코딩 할 필요가 없다는 것입니다. 더 좋은 방법이 있어야합니다. –