我有这样的方法,你可以看到我修改了它:无法使用PUT方法更新行 - MVC 4?
[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);
}
}
但问题是,我不断收到错误500,即我试图与已经存在于表组合键插入一行。
我的表是一个组合键表,3个键,LanguageID,PeriodID,YearID,Data和UserId是应该更新的字段。
我的AJAX调用看起来是这样的:
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 + " ");
}
});
},
我到底做错了什么?
当您使用'simsdata = db.SIMSDataDbSet.Find(LANGID,周期,一年)什么appens;'?另外我不明白为什么'simsdata'是函数的参数。 – OmarMuscatello
你的'if'块永远不会被执行('langid','period'和'year'的值,并且将永远是它们的默认值,因为你永远不会为它们发送值) –
你是什么意思我不发送他们,检查ajax调用,数据对象 – Vlad