Javascript 无法使用PUT方法更新行-MVC 4?
我有这个方法,你可以看到我修改了它:Javascript 无法使用PUT方法更新行-MVC 4?,javascript,c#,ajax,asp.net-mvc-4,put,Javascript,C#,Ajax,Asp.net Mvc 4,Put,我有这个方法,你可以看到我修改了它: [HttpPut] public HttpResponseMessage PutSIMSData(string langid, byte period, byte year, string data, int userId, SIMSData simsdata)//HttpRequestMessage req) { try { //SIMSData simsdata = new SIMSData(); //st
[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);
}
}
我做错了什么 我认为您发布的代码是一些尝试的衍生,并且,在我看来,它有点令人困惑 试试这个
[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 + " ");
}
});
},
我认为您发布的代码是一些尝试的衍生,并且,从我的观点来看,它有点令人困惑 试试这个
[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”的属性,如果为true,则按下保存按钮将运行Update()函数,如果“hasData”为false,则按下保存按钮将调用我的保存()函数。我的错误是,我为这个“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]
公共HttpResponseMessage PutSIMSData(HttpRequestMessage req)
{
尝试
{
SIMSData SIMSData=新的SIMSData();
字符串jsonContent=req.Content.ReadAsStringAsync().Result;
simsdata=JsonConvert.DeserializeObject(jsonContent);
if(ModelState.IsValid)
{
db.Entry(simsdata).State=EntityState.Modified;
db.SaveChanges();
返回请求.CreateResponse(HttpStatusCode.OK,simsdata);
}
其他的
{
返回请求.CreateResponse(HttpStatusCode.BadRequest,simsdata);
}
}
捕获(例外e)
{
返回请求.CreateErrorResponse(HttpStatusCode.InternalServerError,e);
}
}
原来我一直在调用Save/POST方法,而不是Update/PUT方法。我有一个AJAX调用,它获取数据并显示一个保存按钮。当我按下保存按钮时,我获取的数据包含名为“hasData”的属性,如果为true,则按下保存按钮将运行Update()函数,如果“hasData”为false,则按下保存按钮将调用我的保存()函数。我的错误是,我为这个“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]
公共HttpResponseMessage PutSIMSData(HttpRequestMessage req)
{
尝试
{
SIMSData SIMSData=新的SIMSData();
字符串jsonContent=req.Content.ReadAsStringAsync().Result;
simsdata=JsonConvert.DeserializeObject(jsonContent);
if(ModelState.IsValid)
{
db.Entry(simsdata).State=EntityState.Modified;
db.SaveChanges();
返回请求.CreateResponse(HttpStatusCode.OK,simsdata);
}
其他的
{
返回请求.CreateResponse(HttpStatusCode.BadRequest,simsdata);
}
}
捕获(例外e)
{
返回请求.CreateErrorResponse(HttpStatusCode.InternalServerError,e);
}
}
当您使用simsdata=db.SIMSDataDbSet.Find(langid,period,year)时会出现什么代码>?我也不明白为什么simsdata
是函数的一个参数。你的if
块永远不会执行(langid
、period
和year
的值永远是它们的默认值,因为你从来没有为它们发送值)你说我不发送它们是什么意思,检查ajax调用,数据对象为LanguageID
,PeriodID
等发送名称/值对,而不是langid
,period
等。可能是PUT
-HTTP方法请求出错:。我认为您发送的复杂对象包含错误的键(langid
而不是LanguageID
)。使用simsdata=db.SIMSDataDbSet.Find(langid,period,year)时会出现什么情况代码>?我也不明白为什么simsdata
是函数的一个参数。你的if
块永远不会执行(langid
、period
和year
的值永远是它们的默认值,因为你从来没有为它们发送值)你说我不发送它们是什么意思,检查ajax调用,数据对象为LanguageID
,PeriodID
等发送名称/值对,而不是langid
,period
等。可能是PUT
-HTTP方法请求出错:。我认为您发送的复杂对象包含错误的键(langid
,而不是LanguageID
)。