I have this method and as you can see I modified it:
[HttpPut]
public HttpResponseMessage PutSIMSData(string langid, byte period, byte year, string data, int userId, SIMSData simsdata)//HttpRequestMessage req)
{
try
{
//SIMSData simsdata = new SIMSData();
//string jsonContent = req.Content.ReadAsStringAsync().Result;
//simsdata = JsonConvert.DeserializeObject<SIMSData>(jsonContent);
//SIMSData simsdata = db.SIMSDataDbSet.Find(langid, period, year);
if (ModelState.IsValid &&
simsdata.LanguageID == langid &&
simsdata.PeriodID == period &&
simsdata.YearID == year)
{
//simsdata.UserID = userId;
//simsdata.Data = data;
db.Entry(simsdata).State = EntityState.Modified;
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK, simsdata);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest, simsdata);
}
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
But the problem is, I keep getting Error 500, i.e I am trying to insert row with key combination which already exists in the table.
My table is a composite key table, 3 keys, LanguageID, PeriodID, YearID, Data and UserId are fields that should be updated.
My ajax call looks like this:
updateSIMSDataWithAllParams: function (lang, period, year, data, userId) {
jq.ajax({
context: simsDataView,
contentType: 'application/json; charset=utf-8',
type: "PUT",
url: "/api/SIMSData",
dataType: "json",
data: JSON.stringify({
LanguageID: lang,
PeriodID: period,
YearID: year,
Data: data,
UserID: userId
}),
beforeSend: function (jqXHR, settings) {
simsDataView.setStatusMsg(messages.listingTreeDataMsg, "blue");
},
success: function (data, textStatus, jqXHR) {
},
error: function (jqXHR, textStatus, errorThrown) {
errorsMsgTxt.text("SIMS Tree: " + textStatus + ". Error: " + errorThrown + " ");
}
});
},
What am i doing wrong?