Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用PUT方法更新行-MVC 4?_Javascript_C#_Ajax_Asp.net Mvc 4_Put - Fatal编程技术网

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
)。