无法使用 PUT 方法更新行 - MVC 4?
Cannot update row with PUT method - 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,即我正在尝试插入行,其中的组合键已经存在于 table。
我的table是复合键table,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 + " ");
}
});
},
我做错了什么?
我认为您发布的代码是一些尝试的推导,在我看来,它有点令人困惑。
试试这个
[HttpPut]
public HttpResponseMessage PutSIMSData(string langid, byte period, byte year, string data, int userId)
{
if (ModelState.IsValid)
{
try
{
SIMSData simsdata = db.SIMSDataDbSet.Find(langid, period, year);
if(simsdata == null) {
// entity not found
}
// Updating values
simsdata.UserID = userId;
simsdata.Data = data;
db.Entry(simsdata).State = EntityState.Modified;
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK, simsdata);
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest, simsdata);
}
}
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({
langid: lang,
period: period,
year: 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 + " ");
}
});
},
原来我一直在调用我的 Save/POST 方法而不是我的 Update/PUT 方法。我有一个 AJAX 调用,它获取数据并显示一个保存按钮。当我按下保存按钮时,我获取的数据包含名为 "hasData" 的 属性,当为真时,按下保存按钮将 运行 Update() 函数,如果 "hasData" 是false,按下 Save 按钮将调用我的 Save() 函数。我遇到的错误是,我为此 "hasData" 属性.
检查了错误的 JavaScript 对象
我现在在我的控制器中使用这段代码:
[HttpPut]
public HttpResponseMessage PutSIMSData(HttpRequestMessage req)
{
try
{
SIMSData simsdata = new SIMSData();
string jsonContent = req.Content.ReadAsStringAsync().Result;
simsdata = JsonConvert.DeserializeObject<SIMSData>(jsonContent);
if (ModelState.IsValid)
{
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);
}
}
我有这个方法,如你所见,我修改了它:
[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,即我正在尝试插入行,其中的组合键已经存在于 table。
我的table是复合键table,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 + " ");
}
});
},
我做错了什么?
我认为您发布的代码是一些尝试的推导,在我看来,它有点令人困惑。
试试这个
[HttpPut]
public HttpResponseMessage PutSIMSData(string langid, byte period, byte year, string data, int userId)
{
if (ModelState.IsValid)
{
try
{
SIMSData simsdata = db.SIMSDataDbSet.Find(langid, period, year);
if(simsdata == null) {
// entity not found
}
// Updating values
simsdata.UserID = userId;
simsdata.Data = data;
db.Entry(simsdata).State = EntityState.Modified;
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK, simsdata);
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest, simsdata);
}
}
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({
langid: lang,
period: period,
year: 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 + " ");
}
});
},
原来我一直在调用我的 Save/POST 方法而不是我的 Update/PUT 方法。我有一个 AJAX 调用,它获取数据并显示一个保存按钮。当我按下保存按钮时,我获取的数据包含名为 "hasData" 的 属性,当为真时,按下保存按钮将 运行 Update() 函数,如果 "hasData" 是false,按下 Save 按钮将调用我的 Save() 函数。我遇到的错误是,我为此 "hasData" 属性.
检查了错误的 JavaScript 对象我现在在我的控制器中使用这段代码:
[HttpPut]
public HttpResponseMessage PutSIMSData(HttpRequestMessage req)
{
try
{
SIMSData simsdata = new SIMSData();
string jsonContent = req.Content.ReadAsStringAsync().Result;
simsdata = JsonConvert.DeserializeObject<SIMSData>(jsonContent);
if (ModelState.IsValid)
{
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);
}
}